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.