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:
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.
Du kannst es so machen:
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
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:
protected $_objectManager;
public function __construct(
...,
\Magento\Framework\ObjectManager $objectManager,
....
){
....
$this->_objectManager= $objectManager;
....
}
[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\ObjectManager
können Sie rufen create
von get
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 .