Um bloco e um modelo são duas coisas diferentes. Isto não é uma duplicata.
pspahn
Rajeev K modelos e blocos de Tom são totalmente diferente e foi decorado
theSeeker
Respostas:
20
ATUALIZADO: RESPOSTA Refere-se a MAGENTO 2 ALPHA
Eu queria que fosse assim tão fácil.
Depende de onde você deseja instanciar.
Se você deseja criar uma instância de dentro de outro bloco, faça o seguinte:
mas aqui há um problema.
você deve criar um membro protegido no modelo chamado _blockFactorye injetar uma instância \Magento\Framework\View\Element\BlockFactoryno construtor e atribuí-lo a esse membro var.
@ Marius $ toplink = $ this-> getLayout () -> getBlock ('top.links') -> toHtml (); use no magento 1 para magento 2 $ this -> _ view-> getLayout () -> getBlock (Full \ Bloco \ Classe \ Nome \ Aqui \) '-> toHtml (); isso dá um erro como este Erro fatal: Chamada para uma função de membro toHtml () em um não-objeto como posso obter toHtml ()?
ND17 28/01
se você estiver em um controlador, não precisará injetar nada _view. Ele deve estar disponível por padrão, embora eu ache que está obsoleto agora. Eu escrevi esta resposta há 1,5 anos
Marius
1
@SachinS. Você não deve mais usar isso. _viewestá obsoleto agora em controladores e em breve desaparecerá,
Respostas:
ATUALIZADO: RESPOSTA Refere-se a MAGENTO 2 ALPHA
Eu queria que fosse assim tão fácil.
Depende de onde você deseja instanciar.
Se você deseja criar uma instância de dentro de outro bloco, faça o seguinte:
De dentro de um controlador, faça o seguinte:
De dentro de um modelo:
mas aqui há um problema.
você deve criar um membro protegido no modelo chamado
_blockFactory
e injetar uma instância\Magento\Framework\View\Element\BlockFactory
no construtor e atribuí-lo a esse membro var.Algo assim:
Para instanciar um bloco de dentro de um auxiliar, ele funciona da mesma forma que no modelo
fonte
_view
. Ele deve estar disponível por padrão, embora eu ache que está obsoleto agora. Eu escrevi esta resposta há 1,5 anos_view
está obsoleto agora em controladores e em breve desaparecerá,Para instanciar um bloco, você precisa usar a
\Magento\Framework\View\LayoutInterface
classe e seucreateBlock()
método.Com uma classe auxiliar, você pode fazer isso com este código:
Então ligue
$helper->getBlock()
de onde você precisa.fonte