Cuando creo que obtuve mi cabeza envuelta alrededor del sistema DI de Magento 2, algo surge y lo desenvuelve.
Veo en el código central diferentes formas de acceder a un ayudante.
Por ejemplo, Magento\Catalog\Controller\Category::_initCategory
ahí está esto:
if (!$this->_objectManager->get('Magento\Catalog\Helper\Category')->canShow($category)) {
return false;
}
Pero en Magento\Catalog\Block\Category\View
el ayudante se inyecta en el constructor
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Catalog\Model\Layer\Category $catalogLayer,
\Magento\Framework\Registry $registry,
\Magento\Catalog\Helper\Category $categoryHelper,
array $data = array()
) {
$this->_categoryHelper = $categoryHelper;
$this->_catalogLayer = $catalogLayer;
$this->_coreRegistry = $registry;
parent::__construct($context, $data);
}
Esto me llevó a pensar que se debería acceder a los ayudantes de manera diferente en los controladores y bloques (y modelos), pero luego encontré un controlador donde se inyecta un ayudante en el constructor Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute
.
Por favor, despeja la niebla para mí.
¿Cuándo debo usar DI y cuándo debo usar objectManager
? ¿y por qué?
He leído esta pregunta: Instanciando ayudantes en Magento 2 . Esta es solo una pregunta de seguimiento sobre eso.