Quand je pense avoir enroulé ma tête autour du système DI de Magento 2, quelque chose arrive et le déballe.
Je vois dans le code principal différentes façons d'accéder à un assistant.
Par exemple, Magento\Catalog\Controller\Category::_initCategory
il y a ceci:
if (!$this->_objectManager->get('Magento\Catalog\Helper\Category')->canShow($category)) {
return false;
}
Mais dans Magento\Catalog\Block\Category\View
l'aide est injecté dans le constructeur
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);
}
Cela m'a amené à penser que les assistants devraient être accessibles différemment dans les contrôleurs et les blocs (et les modèles), mais j'ai ensuite trouvé un contrôleur où une aide est injectée dans le constructeur Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute
.
S'il vous plaît, nettoyez le brouillard pour moi.
Quand dois-je utiliser DI et quand dois-je utiliser objectManager
? et pourquoi?
J'ai lu cette question: Instanciation des aides dans Magento 2 . Ce n'est qu'une question complémentaire à ce sujet.