Ich sehe, du bist zur richtigen Lösung gekommen, willst nur zusammenfassen.
Die Konstruktorinjektion sollte verwendet werden, um Helfer (oder eine andere Instanz) in der von Ihnen benötigten Klasse abzurufen:
class SomeClass
{
public function __construct(\Magento\Core\Helper\Data $helper)
{
$this->helper = $helper;
}
public function doSmth()
{
$this->helper->someMethod();
}
}
Beachten Sie, dass keine phpDoc-Kommentare erforderlich sind. Magento liest die Konstruktorsignatur direkt, um herauszufinden, welche Abhängigkeiten erforderlich sind.
\ Magento \ Core \ Helper \ Factory sollte nur in den seltenen Fällen verwendet werden, wenn Sie mehrere Helfer anrufen müssen oder nicht genau wissen, welche Sie benötigen.
Von der direkten Verwendung von Object Manager wird strengstens abgeraten . Also bitte vermeiden Sie:
\Magento\Core\Model\ObjectManager::getInstance()
Es dient nur zur Serialisierung / Deserialisierung.
helper
in Vorlage verwenden, wie$this->helper('Magento\Catalog\Helper\Image')
folgt es der Best Practice?Es sieht so aus, als würden Magentos ermutigende Leute ihr neues automatisches Abhängigkeitsinjektionssystem verwenden, um Helfer und Modelle über den Konstruktor des Objekts in Objekte zu bringen.
Die kurze Version? Wenn Sie ein Objekt, das von dem Objektmanager instanziiert ist,
und einen Konstruktor mit einem PHPDoc dekorieren, und die Parameter hat einen richtigen Typ Hinweis gesetzt, wird der Objektmanager instanziiert automatisch den Helfer (oder, wie ich glaube, andere Objekte) für Sie.@param
Der folgende Konstruktor würde beispielsweise einen Core Data Helper in das Objekt einfügen.
quelle
Abgesehen von den obigen Antworten können Sie, wenn Sie den Helfer in der HTML-Vorlage verwenden müssen, einfach so vorgehen:
Ich hoffe es ist hilfreich wenn jemand es vorher nicht gewusst hat;)
quelle
Die Art und Weise, wie Helfer instanziiert werden (zumindest für das neue Backend (~ dev50) -Modul), erfolgt über eine helperFactory:
Das ist im Wesentlichen nur ein spezialisierter Typ einer Modellfabrik. Beispiel: Magento \ Core \ Block \ Context-Zeile 143 (dev50) als Teil des Konstruktors:
Die Helfer-Factory gibt das angeforderte Modell basierend auf dem Klassennamen zurück und stellt sicher, dass es sich um eine
instanceof
abstrakte Helfer-Klasse handelt:Wenn Sie dies selbst implementieren , scheint es, als würde Magento Core es auf zwei Arten laden:
Rollen Sie Ihre eigene Fabrik:
Oder greifen Sie einfach direkt zu:
quelle
get
?Versuchen Sie es auf diese Weise
quelle