Magento rät ausdrücklich von der direkten Verwendung von ObjectManager ab. Es bietet Serviceklassen, die es für alle Szenarien abstrahieren.
Für alle nicht injizierbaren Produkte (Modelle) müssen Sie ab Werk Folgendes verwenden:
protected $ pageFactory;
public function __construct (\ Magento \ Cms \ Model \ PageFactory $ pageFactory)
{
$ this-> pageFactory = $ pageFactory;
}
public function someFunc ()
{
...
$ page = $ this-> pageFactory-> create ();
...
}
Alles, was Sie tun müssen, ist, die Fabrik des gewünschten Modells im Konstruktor zu fragen. Es wird automatisch generiert, wenn Sie Magento oder den Compiler ausführen.
[ein Jahr später bearbeiten]
Auch wenn die Antwort oben funktioniert, ist es nicht die beste Vorgehensweise. Informationen zur richtigen Vorgehensweise finden Sie in der Antwort von Anton.
Technisch gesehen, wenn Sie eine Instanz der haben \Magento\Framework\ObjectManagerkönnen Sie rufen createvon getund dies wird Ihnen das Objekt , das Sie sich wünschen. Aber es hängt wirklich davon ab, wo Sie dies verwenden möchten, da Magento 2 über den Konstruktor in Richtung Abhängigkeitsinjektion wechselt .
Antworten:
Magento rät ausdrücklich von der direkten Verwendung von ObjectManager ab. Es bietet Serviceklassen, die es für alle Szenarien abstrahieren.
Für alle nicht injizierbaren Produkte (Modelle) müssen Sie ab Werk Folgendes verwenden:
Alles, was Sie tun müssen, ist, die Fabrik des gewünschten Modells im Konstruktor zu fragen. Es wird automatisch generiert, wenn Sie Magento oder den Compiler ausführen.
quelle
Du kannst es so machen:
Sie müssen jedoch sicherstellen, dass das
_objectManager
Mitglied vorhanden ist.In den meisten Klassen sollte es, aber wenn es nicht in den Konstruktor injiziert. So was:
[ein Jahr später bearbeiten]
Auch wenn die Antwort oben funktioniert, ist es nicht die beste Vorgehensweise. Informationen zur richtigen Vorgehensweise finden Sie in der Antwort von Anton.
quelle
Technisch gesehen, wenn Sie eine Instanz der haben
\Magento\Framework\ObjectManager
können Sie rufencreate
vonget
und dies wird Ihnen das Objekt , das Sie sich wünschen. Aber es hängt wirklich davon ab, wo Sie dies verwenden möchten, da Magento 2 über den Konstruktor in Richtung Abhängigkeitsinjektion wechselt .quelle