Quando penso di essermi preso la testa attorno al sistema DI di Magento 2 qualcosa viene fuori e lo scarterà.
Vedo nel codice principale diversi modi per accedere a un aiutante.
Ad esempio, Magento\Catalog\Controller\Category::_initCategory
c'è questo:
if (!$this->_objectManager->get('Magento\Catalog\Helper\Category')->canShow($category)) {
return false;
}
Ma Magento\Catalog\Block\Category\View
nell'aiutante viene iniettato nel costruttore
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);
}
Questo mi ha portato a pensare che gli helper dovrebbero avere accesso in modo diverso nei controller e nei blocchi (e nei modelli), ma poi ho trovato un controller in cui un helper viene iniettato nel costruttore Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute
.
Per favore cancella la nebbia per me.
Quando dovrei usare DI e quando dovrei usare objectManager
? e perché?
Ho letto questa domanda: istanziare gli helper in Magento 2 . Questa è solo una domanda di follow-up su questo.