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());
Manish
quelle

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);
    }
}
Sohel Rana
quelle
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