답변:
날짜 : MAGENTO 2 ALPHA에 대한 답변
나는 그것이 그렇게 쉬웠 으면 좋겠다.
인스턴스화하려는 위치에 따라 다릅니다.
다른 블록 내부에서 인스턴스를 만들려면 다음과 같이하십시오.
$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()
필요한 곳에서 전화하십시오 .