Comment instancier un modèle dans magento2?


14

Existe-t-il un moyen de faire quelque chose de simple comme dans magento2?

fonction d'appel comme celle-ci dans magento 2,

$model = Mage::getModel('cms/page');

la question n'est pas claire mettez plus de détails ....
Amit Bera

Réponses:


28

Magento décourage strictement l'utilisation directe d'ObjectManager. Il fournit des classes de service qui l'abstiennent pour tous les scénarios.

Pour tous les non-injectables (modèles), vous devez utiliser l'usine:

protégé $ pageFactory;

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

fonction publique someFunc ()
{
    ...
    $ page = $ this-> pageFactory-> create ();
    ...
}

Tout ce que vous avez à faire est de demander l'usine du modèle souhaité dans le constructeur. Il sera généré automatiquement lorsque vous exécutez Magento ou le compilateur.


11

Vous pouvez le faire comme ceci:

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

mais vous devez vous assurer que le _objectManagermembre existe.

Dans la plupart des classes, il le devrait, mais s'il ne l'injecte pas dans le constructeur. Comme ça:

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

[modifier un an plus tard]
Même si la réponse ci-dessus fonctionne, ce n'est pas la meilleure pratique. Pour la bonne façon de procéder, voir la réponse d'Anton.


a obtenu une erreur - La classe Magento \ Framework \ ObjectManager n'existe pas
Anas Mansuri

5

Techniquement , si vous avez une instance de \Magento\Framework\ObjectManagervous pouvez appeler createde getet cela vous donnera l'objet que vous désirez. Mais cela dépend vraiment de l'endroit où vous souhaitez l'utiliser car Magento 2 se déplace vers l' injection de dépendance via le constructeur .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.