Як створити модель в magento2?


14

Чи є спосіб зробити щось просте, як у magento2?

така функція виклику в magento 2,

$model = Mage::getModel('cms/page');

питання незрозуміло, поставте більше деталей ....
Аміт Бера

Відповіді:


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 не існує
Anas

5

Технічно , якщо у вас є екземпляр класу \Magento\Framework\ObjectManagerможна викликати createз , getі це дасть вам об'єкт , який ви хочете. Але це дійсно залежить від того, де ви хочете використовувати це для того, як Magento 2 переходить до ін'єкції залежності через конструктор .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.