¿Hay una manera simple como en magento1:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
¿Hay una manera simple como en magento1:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
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í:
$this->getLayout()->createBlock('Full\Block\Class\Name\Here');
Desde el interior de un controlador, haga esto:
$this->_view->getLayout()->createBlock('Full\Block\Class\Name\Here');
Desde el interior de un modelo:
$this->_blockFactory->createBlock('Full\Block\Class\Name\Here');
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:
protected $_blockFactory;
public function __construct(
...,
\Magento\Framework\View\Element\BlockFactory $blockFactory,
....
){
....
$this->_blockFactory = $blockFactory;
....
}
Para crear instancias de un bloque desde el interior de un asistente, funciona igual que para el modelo
_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 su createBlock()
método.
Con una clase auxiliar puedes hacerlo con este código:
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;
}
}
Luego llame $helper->getBlock()
desde donde lo necesite.