Tu es nicht.
Dies ist wie ObjectManager::getInstance()->create()
in einer Vorlage!
Verwenden Sie stattdessen einen benutzerdefinierten Block, der den Helfer als Konstruktorabhängigkeit empfängt, und fügen Sie eine Proxy-Methode hinzu, die die Helfer-Methode aufruft.
In der Vorlage:
$block->customMethod()
Im Block:
public function __construct(Path/To/Helper/Class $helperClass, ...other dependencies...)
{
$this->helper = $helperClass;
// ...other assignments and call to parent::__construct()
}
public function customMethod()
{
return $this->helper->customMethod();
}
Im OOP-Prinzip wird dadurch vermieden, dass das "Gesetz von Demeter" verletzt wird. Es kapselt die Geschäftslogik im Block anstelle der Vorlage. Als Nebeneffekt macht es die Logik auch testbarer, wenn die Logik in den Block verschoben wird.
In Bezug auf die Logik, die in die Hilfsklassen eingefügt wurde, finde ich, dass Helfer in Magento 2 meistens für Dienste sinnvoll sind, beispielsweise für etwas, das kein Modell ist, aber wiederverwendbaren Code enthält, zum Beispiel Preisformatierung (die im Kern enthalten ist, aber ich kann Ich denke momentan nicht an ein besseres Beispiel.
di.xml
für den Blockklassentyp keine Layoutkonfiguration beibehalten. Ich habe zum Beispiel versucht, dies für die Klasse zu tun.\Magento\Catalog\Block\Product\View\Type\Simple
Die Vorlage,default.phtml
die in unserer Vorlage verwendet wurde, wird ignoriert. Keine Ahnung warum im MomentIch sehe Helfer als globale Funktionen innerhalb Ihres Moduls (Entschuldigung für das Wort "global") und Manager / Serviceverträge als globale Funktionen, die sowohl innerhalb als auch außerhalb Ihres Moduls verwendet werden dürfen.
Wenn Sie diesem Prinzip folgen, werden Sie feststellen, dass Helfer nur minimal verwendet werden. Ich verwende sie nur als Konfigurations-Wrapper in meinen Modulen.
Diese Art von Sachen. Wenn Sie andere Funktionen haben, die außerhalb Ihres Moduls praktisch sein könnten, erstellen Sie stattdessen einen Manager.
In einer idealen Welt sollten Entwickler von Drittanbietern, die Funktionen anderer Module benötigen, nur in den verfügbaren Schnittstellen nach Repositorys und Managern sowie nach
Api
Inhalten im Ordner suchen müssen.quelle