Réponses:
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.
Vous pouvez le faire comme ceci:
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
mais vous devez vous assurer que le _objectManager
membre 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.
Techniquement , si vous avez une instance de \Magento\Framework\ObjectManager
vous pouvez 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 car Magento 2 se déplace vers l' injection de dépendance via le constructeur .