Когда я думаю, что обернул голову вокруг системы DI из Magento 2, что-то появляется и разворачивается.
Я вижу в основном коде разные способы доступа к помощнику.
Например, Magento\Catalog\Controller\Category::_initCategory
там есть это:
if (!$this->_objectManager->get('Magento\Catalog\Helper\Category')->canShow($category)) {
return false;
}
Но в Magento\Catalog\Block\Category\View
помощник вводится конструктор
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);
}
Это привело меня к мысли, что к помощникам следует обращаться по-разному в контроллерах и блоках (и моделях), но затем я нашел контроллер, в который в конструктор вводится помощник Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute
.
Пожалуйста, очистите туман для меня.
Когда я должен использовать DI и когда я должен использовать objectManager
? и почему?
Я прочитал этот вопрос: Создание помощников в Magento 2 . Это просто дополнительный вопрос по этому вопросу.