Respostas:
O Magento desencoraja estritamente o uso do ObjectManager diretamente. Ele fornece classes de serviço que o abstraem para todos os cenários.
Para todos os não injetáveis (modelos), é necessário usar a fábrica:
protected $ pageFactory; função pública __construct (\ Magento \ Cms \ Model \ PageFactory $ pageFactory) { $ this-> pageFactory = $ pageFactory; } função pública someFunc () { ... $ page = $ this-> pageFactory-> create (); ... }
Tudo o que você precisa fazer é solicitar a fábrica do modelo desejado no construtor. Ele será gerado automaticamente quando você executar o Magento ou o compilador.
Você pode fazer assim:
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
mas você precisa garantir que o _objectManager
membro exista.
Na maioria das classes, deveria, mas se não injetar no construtor. Como isso:
protected $_objectManager;
public function __construct(
...,
\Magento\Framework\ObjectManager $objectManager,
....
){
....
$this->_objectManager= $objectManager;
....
}
[editar um ano depois]
Mesmo que a resposta acima funcione, não é a melhor prática. Para o caminho certo, veja a resposta de Anton.
Tecnicamente, se você tiver uma instância do \Magento\Framework\ObjectManager
que você pode chamar create
de get
e isso vai dar-lhe o objeto que você deseja. Mas isso realmente depende de onde você deseja usar isso, pois o Magento 2 muda para injeção de dependência via construtor .