¿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');

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.


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.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.