Pregunta

Es allí una manera de hacer algo simple, como en magento2?

una llamada a la función como esta en magento 2,

$model = Mage::getModel('cms/page');
¿Fue útil?

Solución

Magento desalienta estrictamente el uso de ObjectManager directamente.Proporciona clases de servicio que lo abstraen para todos los escenarios.

Para todos los no inyectables (modelos) que tiene que usar fábrica:

protected $pageFactory;

public function __construct(\Magento\Cms\Model\PageFactory $pageFactory)
{
    $this->pageFactory = $pageFactory;
}

public function someFunc()
{
    ...
    $page = $this->pageFactory->create();
    ...
}

Todo lo que tiene que hacer es solicitar fábrica de modelo deseado en constructor.Se generará automáticamente cuando ejecute magento o compilador.

Otros consejos

Usted puede hacer esto de esta manera:

$model = $this->_objectManager->create('Full\Model\Class\Name\Here');

pero usted tiene que asegurarse de que el _objectManager existen miembros.

En la mayoría de las clases que se debe, pero si no lo inyecta en el constructor.Como este:

protected $_objectManager;
public function __construct(
   ...,
   \Magento\Framework\ObjectManager $objectManager,
   ....
){
    ....
    $this->_objectManager= $objectManager;
    ....
}

[editar un año más tarde]
Incluso si la respuesta anterior funciona, no es la mejor práctica.Para encontrar la manera correcta de hacerlo ver Anton respuesta.

Técnicamente si usted tiene una instancia de la \Magento\Framework\ObjectManager usted puede llamar a create de get y esto le dará el objeto de deseo.Pero realmente depende de donde usted desea utilizar esto para como Magento 2 se desplaza hacia el la inyección de dependencia a través de constructor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top