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');
Matoeil
la source
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.

Anton Kril
la source
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.

Marius
la source
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 .

David Manners
la source