Dynamisch Block in Magento 2 erstellen und als Ajax-Anrufantwort senden?


7

Ich möchte das Folgende in Magento 2.x ersetzen

$block = $this->getLayout()->createBlock('customer/form_login')->setTemplate('persistent/customer/form/login.phtml');

$this->getResponse()->setBody($block->toHtml());

Antworten:


13

Sie können versuchen, auf folgende Weise einen neuen Block innerhalb des Controllers zu erstellen

<?php

namespace [Vendor]\[Module]\Controller\[ControllerName];

use Magento\Framework\App\Action\Context;

class [YourControllerAction] extends \Magento\Framework\App\Action\Action
{

    /**
     * Index constructor.
     *
     * @param Context $context
     */
    public function __construct(
        Context $context
    ) {
        parent::__construct($context);
    }

    /**
     * @return 
     */
    public function execute()
    {
        $block = $this->_view->getLayout()->getLayout()
                ->createBlock('Magento\Customer\Block\Form\Login')
                ->setTemplate('Magento_Customer::form/login.phtml')
                ->toHtml();

        $this->getResponse()->setBody($block);
    }
}

Diese Anweisung wird nicht ausgeführt. Ich überprüfe, ob das Protokoll vor und nach dieser Anweisung gedruckt werden soll. $ block = $ resultPage-> getLayout () -> createBlock ('Magento \ Customer \ Block \ Form \ Login') -> setTemplate ('Magento_Customer :: form / login.phtml') -> toHtml ();
— Manish

Initialisieren Sie $ this-> resultPageFactory nach Konstrukt?
— Sohel Rana

Überprüfen Sie den aktualisierten Code
— Sohel Rana

Ja, ich habe Ihre Antwort initialisiert. Es scheint in Ordnung zu sein. Jetzt gibt es einen Fehler in meinem benutzerdefinierten Block: Wiederherstellbarer Fehler: Argument 2, das an \ ..... \ ....__ übergeben wurde, muss vom Typ array sein, null angegeben . Bitte darfst du helfen. Vielen Dank für Ihre perfekte Antwort.
— Manish

3
@ Manish: Wenn Sie die __construct-Funktion ändern, müssen Sie den Ordner / var / generator entfernen, damit Magento 2 den Cache-Code neu erstellen kann
— Hoang Trinh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.