Comment instancier un modèle dans magento2 ?
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');
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.