magento 2で動的にブロックを作成し、ajax呼び出し応答として送信しますか?


7

magento 2.xで以下の置き換えをしたい

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

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

回答:


13

コントローラ内に新しいブロックを作成するには、次の方法を試すことができます

<?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);
    }
}

このステートメントは実行されませんこのステートメントの前後にログを出力することを確認しています。$ block = $ resultPage-> getLayout()-> createBlock( 'Magento \ Customer \ Block \ Form \ Login')-> setTemplate( 'Magento_Customer :: form / login.phtml')-> toHtml();
マニッシュ、

$ this-> resultPageFactoryを構成によって初期化しますか?
Sohel Rana

更新されたコードをチェック
Sohel Rana

はい、私はあなたの答えを初期化しましたが問題ありません、今私のカスタムブロックにエラーがあります:回復可能なエラー:\ ..... \ ....__ construct()に渡された引数2は配列型でなければならず、nullが与えられます。助けてください。完璧な答えをありがとう。
マニッシュ、

3
@マニッシュ:__construct関数を変更するたびに、Magento 2がキャッシュコードを再作成できるように、/ var / generationフォルダーを削除する必要があります
Hoang Trinh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.