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