Pero aquí hay una trampa.
debe crear un miembro protegido en el modelo llamado _blockFactorye inyectar una instancia de \Magento\Framework\View\Element\BlockFactoryen el constructor y asignarlo a ese miembro var.
@Marius $ toplink = $ this-> getLayout () -> getBlock ('top.links') -> toHtml (); usar en magento 1 para magento 2 $ this -> _ view-> getLayout () -> getBlock (Full \ Block \ Class \ Name \ Here ') -> toHtml (); esto da un error como este Error fatal: Llamar a una función miembro toHtml () en un no objeto ¿cómo puedo obtener toHtml ()?
ND17
Si está en un controlador, no necesita inyectar nada _view. Debería estar disponible de forma predeterminada, aunque creo que ahora está en desuso. Escribí esta respuesta hace 1.5 años
Marius
1
@SachinS. No deberías usar eso nunca más. _viewahora está en desuso en los controladores y pronto desaparecerá,
Respuestas:
ACTUALIZADO: LA RESPUESTA SE REFIERE AL MAGENTO 2 ALFA
Desearía que fuera así de fácil.
Depende de dónde quieras instanciarlo.
Si desea crear una instancia desde otro bloque, hágalo así:
Desde el interior de un controlador, haga esto:
Desde el interior de un modelo:
Pero aquí hay una trampa.
debe crear un miembro protegido en el modelo llamado
_blockFactory
e inyectar una instancia de\Magento\Framework\View\Element\BlockFactory
en el constructor y asignarlo a ese miembro var.Algo como esto:
Para crear instancias de un bloque desde el interior de un asistente, funciona igual que para el modelo
fuente
_view
. Debería estar disponible de forma predeterminada, aunque creo que ahora está en desuso. Escribí esta respuesta hace 1.5 años_view
ahora está en desuso en los controladores y pronto desaparecerá,Para crear una instancia de un bloque, debe usar la
\Magento\Framework\View\LayoutInterface
clase y sucreateBlock()
método.Con una clase auxiliar puedes hacerlo con este código:
Luego llame
$helper->getBlock()
desde donde lo necesite.fuente