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');

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.


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.