Ответы:
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 смещается в сторону внедрения зависимостей через конструктор .