Magento 2のDIシステムに頭を巻きつけたと思うと、何かが出てきて、包みを解きます。
ヘルパーにアクセスするさまざまな方法をコアコードで確認します。
たとえば、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でのヘルパーのインスタンス化。これはそれに関するフォローアップの質問です。