Como instanciar um modelo em magento2?
Pergunta
Existe uma maneira de fazer algo simples como em magento2?
chamada de função como esta no magento 2,
$model = Mage::getModel('cms/page');
Solução
Magento estritamente desencoraja o uso de ObjectManager diretamente.Ele oferece serviço de classes que abstraem-lo para longe, para todos os cenários.
Para todos os não-injetáveis (modelos) você tem que usar a fábrica:
protected $pageFactory; public function __construct(\Magento\Cms\Model\PageFactory $pageFactory) { $this->pageFactory = $pageFactory; } public function someFunc() { ... $page = $this->pageFactory->create(); ... }
Tudo que você tem a fazer é perguntar-fábrica do modelo desejado no construtor.Será gerado automaticamente quando você executar o Magento ou compilador.
Outras dicas
Você pode fazer assim:
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
mas você tem que certificar-se de que o _objectManager
membro existe.
Na maioria das classes, ele deve, mas se ele não injetá-lo no construtor.Como esta:
protected $_objectManager;
public function __construct(
...,
\Magento\Framework\ObjectManager $objectManager,
....
){
....
$this->_objectManager= $objectManager;
....
}
[editar um ano mais tarde]
Mesmo se a resposta acima funciona, não é a melhor prática.A maneira certa de fazê-lo ver Anton resposta.
Tecnicamente, se você tem uma instância do \Magento\Framework\ObjectManager
você pode chamar create
de get
e isso vai dar-lhe o objeto de desejo.Mas isso realmente depende de onde você deseja usar isso para Magento 2 turnos para injeção de dependência via construtor.