Cómo crear una instancia de un modelo en magento2?
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');
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.