Wenn ich glaube, ich habe meinen Kopf um das DI-System von Magento 2 gewickelt, kommt etwas auf und wickelt es ab.
Ich sehe im Kerncode verschiedene Möglichkeiten, auf einen Helfer zuzugreifen.
Zum Beispiel Magento\Catalog\Controller\Category::_initCategory
drin ist dies:
if (!$this->_objectManager->get('Magento\Catalog\Helper\Category')->canShow($category)) {
return false;
}
Aber in Magento\Catalog\Block\Category\View
den Helfer wird in den Konstruktor gespritzt
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);
}
Dies führte mich zu der Annahme, dass auf die Helfer in Controllern und Blöcken (und Modellen) unterschiedlich zugegriffen werden sollte, aber dann fand ich einen Controller, in den ein Helfer in den Konstruktor injiziert wird Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute
.
Bitte klären Sie den Nebel für mich.
Wann sollte ich DI verwenden und wann sollte ich verwenden objectManager
? und warum?
Ich habe diese Frage gelesen: Helfer in Magento 2 instanziieren . Dies ist nur eine Folgefrage dazu.