magento2에서 블록을 인스턴스화하는 방법


답변:


20

날짜 : 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;
    ....
}

도우미 내부에서 블록을 인스턴스화하려면 모델과 동일하게 작동합니다.


더 간단할수록 좋습니다
Matoeil

@Marius $ toplink = $ this-> getLayout ()-> getBlock ( 'top.links')-> toHtml (); magento 2에 대해 magento 1에서 사용 $ this-> _ view-> getLayout ()-> getBlock (Full \ Block \ Class \ Name \ Here ')-> toHtml (); 이것은 다음과 같은 오류를 발생시킵니다.
ND17

컨트롤러에 있다면를 위해 아무것도 주입 할 필요가 없습니다 _view. 더 이상 사용되지 않는다고 생각하지만 기본적으로 사용 가능해야합니다. 나는이 답변을 1.5 년 전에 작성했습니다
Marius

1
@SachinS. 더 이상 사용해서는 안됩니다. _view컨트롤러에서 더 이상 사용되지 않으며 곧 사라질 것입니다.
Marius

1
이와 같은 pagefactory 객체를 사용하여 호출 할 수 있습니까? $ viewPanelPageFactory = $ this-> resultPageFactory-> create (); $ viewPanel = $ viewPanelPageFactory-> getLayout ()-> getBlock ( 'catalog.leftnav')-> toHtml ();
Sushivam

13

블록을 인스턴스화하려면 \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()필요한 곳에서 전화하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.