Каким будет Mage::getSingleton('core/layout') в Magento 2?
-
13-12-2019 - |
Вопрос
В Magento 1 я могу внедрить шаблон с помощью кода, как показано ниже.
$layout = Mage::getSingleton('core/layout');
$block = $layout->createBlock('module/module_block_identifier');
$block->setTemplate('module/test.phtml');
Как в Magento 2 внедрить шаблон, как указано выше?
Решение
Вы можете использовать:
$block = $this->getLayout()->createBlock(
'Magento\Backend\Block\Template'
)->setTemplate('module/test.phtml');
Сорт \Magento\Framework\View\Result\Layout
как Mage::getSingleton('core/layout')
Другие советы
Если вы находитесь внутри класса блока, вы можете просто использовать:
$layout = $this->getLayout();
....
.
Если вы находитесь в контроллере, вам нужно ввести в конструкторе, а также интерфейс \Magento\Framework\View\LayoutFactory
и использовать это:
protected $layoutFactory;
public function __construct(
...
\Magento\Framework\View\LayoutFactory $layoutFactory,
....
) {
...
$this->layoutFactory = $layoutFactory;
...
}
.
А позже вы можете использовать это:
$layout = $this->layoutFactory->create();
$block = $layout->createBlock(....)
. Не связан с magento.stackexchange