Відповіді:
Magento суворо перешкоджає використанню ObjectManager безпосередньо. Він надає класи обслуговування, які абстрагують його для всіх сценаріїв.
Для всіх неін'єкційних пристроїв (моделей) ви повинні використовувати заводські:
захищена $ pageFactory; публічна функція __construct (\ Magento \ Cms \ Model \ PageFactory $ pageFactory) { $ this-> pageFactory = $ pageFactory; } публічна функція someFunc () { ... $ page = $ this-> pageFactory-> create (); ... }
Все, що вам потрібно зробити, це запитати фабрику потрібної моделі в конструкторі. Він буде генерований автоматично при запуску Magento або компілятора.
Ви можете зробити це так:
$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
можна викликати create
з , get
і це дасть вам об'єкт , який ви хочете. Але це дійсно залежить від того, де ви хочете використовувати це для того, як Magento 2 переходить до ін'єкції залежності через конструктор .