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 _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.
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 .