Jak utworzyć instancję modelu w Magento2?

14

Czy istnieje sposób zrobienia czegoś prostego, jak w Magento2?

taka funkcja wywoływania w Magento 2,

$model = Mage::getModel('cms/page');
Matoeil
źródło
pytanie nie jest jasne podaj więcej szczegółów ....
Amit Bera

Odpowiedzi:

28

Magento odradza bezpośrednie korzystanie z ObjectManager. Zapewnia klasy usług, które ją abstrakują dla wszystkich scenariuszy.

W przypadku wszystkich produktów innych niż zastrzyki (modeli) należy użyć fabryki:

chroniony $ pageFactory;

funkcja publiczna __construct (\ Magento \ Cms \ Model \ PageFactory $ pageFactory)
{
    $ this-> pageFactory = $ pageFactory;
}

funkcja publiczna someFunc ()
{
    ...
    $ page = $ this-> pageFactory-> create ();
    ...
}

Wszystko, co musisz zrobić, to zapytać fabrykę o pożądany model w konstruktorze. Zostanie wygenerowany automatycznie po uruchomieniu Magento lub kompilatora.

Anton Kril
źródło
11

Możesz to zrobić w następujący sposób:

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

ale musisz upewnić się, że _objectManagerczłonek istnieje.

W większości klas powinien, ale jeśli nie wstrzyknie go do konstruktora. Lubię to:

protected $_objectManager;
public function __construct(
   ...,
   \Magento\Framework\ObjectManager $objectManager,
   ....
){
    ....
    $this->_objectManager= $objectManager;
    ....
}

[edytuj rok później]
Nawet jeśli powyższa odpowiedź zadziała, nie jest to najlepsza praktyka. Dla właściwego sposobu zobacz odpowiedź Antona.

Marius
źródło
dostał błąd - Klasa Magento \ Framework \ ObjectManager nie istnieje
Anas Mansuri