Respuestas:
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.
Puedes hacerlo así:
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
pero debes asegurarte de que el _objectManager
miembro 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.
Técnicamente si tiene una instancia de la \Magento\Framework\ObjectManager
que puede llamar create
de get
y 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 .