Kiedy myślę, że owinąłem głowę wokół systemu DI z Magento 2, coś pojawia się i rozpakowuje.
Widzę w kodzie podstawowym różne sposoby dostępu do pomocnika.
Na przykład Magento\Catalog\Controller\Category::_initCategoryjest tam:
if (!$this->_objectManager->get('Magento\Catalog\Helper\Category')->canShow($category)) {
return false;
}
Ale w Magento\Catalog\Block\Category\Viewpomocnika wstrzykuje się konstruktor
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);
}
Doprowadziło mnie to do wniosku, że pomoce powinny być dostępne w różny sposób w kontrolerach i blokach (i modelach), ale potem znalazłem kontroler, w którym pomocnik jest wstrzykiwany do konstruktora Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute.
Proszę, wyczyść dla mnie mgłę.
Kiedy powinienem używać DI, a kiedy powinienem objectManager? i dlaczego?
Przeczytałem to pytanie: Tworzenie instancji Pomocników w Magento 2 . To tylko kolejne pytanie na ten temat.