Salut à tous!
Voilà, ça fait 24h environ que je me casse la tête à arranger un problème...
J'ai un doctrine.listener dont le rôle est d'envoyer un mail lors du persist d'une entité, le contenu étant généré par le rendu de Twig. Mais apparemment, ce rendu perturbe l'affichage de la barre de débogage de Symfony... Voici l'erreur:
Voici le code de mon listenerCircular reference detected for service "security.context", path: "security.firewall.map.context.main -> security.context -> security.authorization_checker -> security.authentication.manager -> fos_user.user_provider.username -> fos_user.user_manager -> doctrine.orm.default_entity_manager -> doctrine.dbal.default_connection -> gerkindevelopment_home.doctrine.notifications -> templating -> twig".
Et voici le contenu de mon services.yml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 <?php namespace GerkinDevelopment\HomeBundle\DoctrineListener; use Doctrine\ORM\Event\LifecycleEventArgs; use GerkinDevelopment\HomeBundle\Entity\MessageRequest; use GerkinDevelopment\HomeBundle\CategoriesGetter\GerkinDevelopmentCategoriesGetter; use Symfony\Component\DependencyInjection\ContainerInterface; use Doctrine\Bundle\DoctrineBundle\Registry; use Symfony\Bundle\TwigBundle\TwigEngine; class Notifications { private $cg; private $templating; private $mailer; private $em; public function __construct(GerkinDevelopmentCategoriesGetter $cg, \Swift_Mailer $mailer, TwigEngine $templating, Registry $em) { $this->cg = $cg; $this->templating = $templating; $this->mailer = $mailer; $this->em = $em; } public function postPersist(LifecycleEventArgs $args) { $entity = $args->getEntity(); // On veut envoyer un email que pour les entités Application if (!($entity instanceof MessageRequest)) { return; } $message = \Swift_Message::newInstance() ->setSubject($this ->cg ->getRequestType($entity->getType()) .": " .$this ->cg ->getRequestCategory($this ->em ->getEntityManager('not_default') , $entity->getType()) .': ' .$entity->getTitle() ) ->setFrom('address@address.com') ->setTo('address@address.com') ->setBody( $this ->templating ->render('GerkinDevelopmentHomeBundle:mails:newMessageRequest.txt.twig', array('newMessage' => $entity))); $this ->mailer ->send($message); } }
J'ai dû faire certaines modifications étranges, comme passer le @doctrine à mon service de notifications, car il dépend de mon CategoriesGetter qui, lui aussi, utilise doctrine... Et ça me faisait tomber dans une belle AUTRE référence circulaire. Bref, je ne m'en sort plus, je sais plus quoi faire....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 services: gerkindevelopment_home.doctrine.notifications: class: GerkinDevelopment\HomeBundle\DoctrineListener\Notifications arguments: [@gerkindevelopment_home.categoriesgetter, @mailer, @templating, @doctrine] tags: - { name: doctrine.event_listener, event: postPersist } gerkindevelopment_home.categoriesgetter: class: GerkinDevelopment\HomeBundle\CategoriesGetter\GerkinDevelopmentCategoriesGetter
Ah et je ne veux pas passer par le ServiceContainer, qui est déprécié d'après SensiolabsInsight.
Si quelqu'un peut m'aider à éclaircir un peu le problème, je lui serait infiniment reconnaissant.
Cordialement,
Nihilivin
Partager