Ответы:
УСТАРЕЛО: ОТВЕТ О МАГЕНТО 2 АЛЬФА
Я хотел бы, чтобы это было так просто.
Это зависит от того, откуда вы хотите создать его экземпляр.
Если вы хотите создать экземпляр из другого блока, сделайте это так:
$this->getLayout()->createBlock('Full\Block\Class\Name\Here');
Внутри контроллера сделайте это:
$this->_view->getLayout()->createBlock('Full\Block\Class\Name\Here');
Внутри модели:
$this->_blockFactory->createBlock('Full\Block\Class\Name\Here');
но тут есть подвох.
Вы должны создать защищенный член в вызываемой модели, _blockFactory
внедрить экземпляр класса \Magento\Framework\View\Element\BlockFactory
в конструкторе и назначить его этому члену var.
Что-то вроде этого:
protected $_blockFactory;
public function __construct(
...,
\Magento\Framework\View\Element\BlockFactory $blockFactory,
....
){
....
$this->_blockFactory = $blockFactory;
....
}
Для создания экземпляра блока из помощника он работает так же, как и для модели.
_view
. Это должно быть доступно по умолчанию, хотя я думаю, что это устарело сейчас. Я написал этот ответ 1,5 года назад
_view
устарела в контроллерах и скоро уйдет
Чтобы создать экземпляр блока, вы должны использовать
\Magento\Framework\View\LayoutInterface
класс и его createBlock()
метод.
С помощью вспомогательного класса вы можете сделать это с помощью этого кода:
namespace Vendor\Module\Helper;
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
/**
* Layout
*
* @var \Magento\Framework\View\LayoutInterface
*/
protected $_layout;
/**
*
*/
public function __construct(
\Magento\Framework\App\Helper\Context $context,
\Magento\Framework\View\LayoutInterface $layout
) {
$this->_layout = $layout;
parent::__construct($context);
}
/**
* Create new block
*/
public function getBlock() {
$block = $this->_layout
->createBlock('Magento\Framework\View\Element\Template')
->setTemplate('Vendor_Module::helper/block.phtml');
return $block;
}
}
Затем позвоните $helper->getBlock()
туда, где вам нужно.