Wie instanziiere ich ein Modell in magento2?

14

Gibt es eine Möglichkeit, etwas Einfaches wie in magento2 zu tun?

Aufruffunktion wie diese in Magento 2,

$model = Mage::getModel('cms/page');
Matoeil
quelle
Frage ist nicht klar, mehr Details setzen ....
Amit Bera

Antworten:

28

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.

Anton Kril
quelle
11

Du kannst es so machen:

$model = $this->_objectManager->create('Full\Model\Class\Name\Here');

Sie müssen jedoch sicherstellen, dass das _objectManagerMitglied 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.

Marius
quelle
got error - Klasse Magento \ Framework \ ObjectManager existiert nicht
Anas Mansuri
5

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 .

David Manners
quelle