Tạo khối động trong magento 2 và gửi dưới dạng phản hồi cuộc gọi ajax?


7

Tôi muốn thay thế sau trong magento 2.x

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

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

Câu trả lời:


13

Bạn có thể thử cách sau để tạo khối mới bên trong bộ điều khiển

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

câu lệnh này không được thực thi Tôi đang kiểm tra để in nhật ký trước và sau câu lệnh này. $ block = $ resultPage-> getLayout () -> createBlock ('Magento \ Customer \ Block \ Form \ Đăng nhập') -> setTemplate ('Magento_Customer :: form / login.phtml') -> toHtml ();
Manish

Bạn có khởi tạo $ this-> resultPageFactory bằng cách xây dựng không?
Sohel Rana

kiểm tra mã cập nhật
Sohel Rana

Có, tôi đã khởi tạo câu trả lời của bạn có vẻ ổn, bây giờ có một lỗi trong khối tùy chỉnh của tôi là: Lỗi có thể phục hồi: Đối số 2 được truyền cho \ ..... \ ....__ construc () phải thuộc mảng kiểu, không có giá trị . xin vui lòng giúp đỡ. Cảm ơn câu trả lời hoàn hảo của bạn.
Manish

3
@M Biến: bất cứ khi nào bạn thay đổi chức năng __construct, bạn cần xóa / var / tạo thư mục để Magento 2 có thể tạo lại mã bộ đệm
Hoàng Trinh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.