Question

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

appelez une fonction comme celle-ci dans magento 2,

$model = Mage::getModel('cms/page');
Était-ce utile?

La solution

Magento décourage strictement l'utilisation de ObjectManager directement.Il fournit des cours de services qui l'abstractent pour tous les scénarios.

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

protected $pageFactory;

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

public function 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 automatiquement généré lorsque vous exécutez Magento ou Compiler.

Autres conseils

Vous pouvez procéder ainsi :

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

mais vous devez vous assurer que le _objectManager le membre existe.

Dans la plupart des classes, cela devrait être le cas, 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 connaître la bonne façon de procéder, voir la réponse d'Anton.

Techniquement, si vous avez une instance du \Magento\Framework\ObjectManager tu peux appeler create de get et cela vous donnera l'objet que vous désirez.Mais cela dépend vraiment de l'endroit où vous souhaitez l'utiliser, à mesure que Magento 2 évolue vers injection de dépendances via le constructeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top