ZF2 et EntityManager (Doctrine)
J'ai un problème. J'essaie d'obtenir de l'Entité Gestionnaire sans un Contrôleur, mais je n'ai trouvé aucun moyen.
En ce moment, j'ai l'Entité Gestionnaire comme ceci:
(Controller)
public function getEntityManager()
{
if (null === $this->_em) {
$this->_em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
}
return $this->_em;
}
(Plugin)
public function getEntityManager()
{
if($this->_em == null){
$this->_em = $this->getController()->getServiceLocator()->get('doctrine.entitymanager.orm_default');
}
return $this->_em;
}
Vous voyez, j'ai toujours besoin d'un contrôleur. Mais, si j'ai besoin de l'EntityManager dans un modèle, j'ai un problème. Je peux donner le modèle le contrôleur, mais je pense que c'est vraiment une mauvaise façon.
Avez-vous une idée pour obtenir l'EntityManager sans un contrôleur?
Vous devez vous connecter pour publier un commentaire.
Ma façon de gérer la Doctrine est par le biais de Services, je ne l'aime suivantes:
La
Service->findAll()
ressemblerait à quelque chose comme ceci:Maintenant, nous devons définir la
my_entity_service
. Je le fais à l'intérieur de monModule.php
Ensuite, j'ai créer l'Usine (remarque: ceci peut également être effectué via une fonction anonyme à l'intérieur de la Module.php)
Maintenant, c'est beaucoup de choses à mâcher 😀 je suis totalement d'obtenir. Ce qui se passe ici est en fait très simple. Au lieu de créer votre modèle et obtenir en quelque sorte à l'EntityManager, vous appelez ZF2 est ServiceManager pour créer le Modèle pour vous et vous injecter de l'EntityManager en elle.
Si ce n'est toujours source de confusion pour vous, je serai heureux d'essayer de m'expliquer mieux. Pour plus de précisions, cependant je voudrais savoir au sujet de votre cas d'utilisation. I. e.: pour quoi avez-vous besoin d'un EntityManager ou exactement où faites u ont besoin.
Cet exemple de code est en dehors de la question de la portée
Juste pour vous donner un exemple vivant de quelque chose que je fais via ServiceFactories avec les formes:
Votre vraie question est "Comment faire pour obtenir une Instance de ServiceManager dans mes classes,"
Pour cela, jetez un oeil à la docu: (en bas de page http://zf2.readthedocs.org/en/latest/modules/zend.service-manager.quick-start.html)
donc implent la ServiceLocatorInterface dans vos classes et ensuite à l'intérieur de votre classe, vous pouvez appeler le:
ou de tout autre service que vous avez enregistré.