Відповіді:
ВІДКЛЮЧЕНО: ВІДПОВІДАЄ ВІДПОВІДЬ ДО АЛФИ MAGENTO 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
у конструктор та призначити його цьому варі-члену.
Щось на зразок цього:
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()
звідти, де вам потрібно.