¿Cómo instanciar un modelo en magento2?

14

¿Hay alguna manera de hacer algo simple como en magento2?

llamar a una función como esta en magento 2,

$model = Mage::getModel('cms/page');
Matoeil
fuente
la pregunta no está clara poner más detalles ....
Amit Bera

Respuestas:

28

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

Para todos los no inyectables (modelos) debe usar la fábrica:

protegido $ pageFactory;

función pública __construct (\ Magento \ Cms \ Model \ PageFactory $ pageFactory)
{
    $ this-> pageFactory = $ pageFactory;
}

función pública someFunc ()
{
    ...
    $ página = $ this-> pageFactory-> create ();
    ...
}

Todo lo que tiene que hacer es preguntarle a la fábrica del modelo deseado en el constructor. Se generará automáticamente cuando ejecutes Magento o el compilador.

Anton Kril
fuente
11

Puedes hacerlo así:

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

pero debes asegurarte de que el _objectManagermiembro existe.

En la mayoría de las clases debería, pero si no lo inyecta en el constructor. Me gusta esto:

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

[editar un año después]
Incluso si la respuesta anterior funciona, no es la mejor práctica. Para la forma correcta de hacerlo, vea la respuesta de Anton.

Marius
fuente
error recibido - Class Magento \ Framework \ ObjectManager no existe
Anas Mansuri
5

Técnicamente si tiene una instancia de la \Magento\Framework\ObjectManagerque puede llamar createde gety esto le dará el objeto que desea. Pero realmente depende de dónde desea usar esto, ya que Magento 2 cambia hacia la inyección de dependencia a través del constructor .

David modales
fuente