Как создать модель в magento2?

14

Есть ли способ сделать что-то простое, как в magento2?

вызвать функцию, как это в magento 2,

$model = Mage::getModel('cms/page');
Matoeil
источник
Вопрос не ясен, поставьте больше деталей ....
Амит Бера

Ответы:

28

Magento строго не рекомендует использовать ObjectManager напрямую. Он предоставляет классы обслуживания, которые абстрагируют его для всех сценариев.

Для всех неинъекционных препаратов (моделей) вы должны использовать фабрику:

защищенный $ pageFactory;

публичная функция __construct (\ Magento \ Cms \ Model \ PageFactory $ pageFactory)
{
    $ this-> pageFactory = $ pageFactory;
}

публичная функция someFunc ()
{
    ...
    $ page = $ this-> pageFactory-> create ();
    ...
}

Все, что вам нужно сделать, это спросить фабрику нужной модели в конструкторе. Он будет автоматически сгенерирован при запуске Magento или компилятора.

Антон Криль
источник
11

Вы можете сделать это так:

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

но вы должны убедиться, что _objectManagerчлен существует.

В большинстве классов так и должно быть, но если это не внедряется в конструктор. Как это:

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

[править год спустя]
Даже если ответ выше работает, это не лучшая практика. Чтобы узнать, как это сделать, смотрите ответ Антона.

Мариус
источник
получил ошибку - Класс Magento \ Framework \ ObjectManager не существует
Анас Мансури
5

Технически , если у вас есть экземпляр класса \Magento\Framework\ObjectManagerможно вызвать createиз , getи это даст вам объект , который вы хотите. Но это действительно зависит от того, где вы хотите использовать это, поскольку Magento 2 смещается в сторону внедрения зависимостей через конструктор .

Дэвид Мэннерс
источник