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');
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top