Hello,
Je code un ptit bundle de commentaire, et j'ai un listener qui doit "écouter" lorsque l'on supprime un article, et qui supprime donc les commentaires liés à l'article.
j'ai une classe "CommentManager" (qui possède plusieurs méthodes dont celle pour supprimer les commentaires) que j'ai rendu disponible en tant que Service.
Mon listener a besoin de récupérer la classe CommentManager pour pouvoir supprimer les commentaires. Mais lorsque j'injecte mon CommentManager dans mon listener Symfony me balance une exception "Circular reference detected for service "doctrine.dbal.default_connection", path: "doctrine.dbal.default_connection". "
Je peux éviter cette exception en injectant le Service Container directement dans mon service, mais l'inspecteur de SensioLab me dis que le Container ne doit pas être passé en argument.
Donc j'aimerai savoir ce qui provoque cette erreure car la je bloque vraiment.
service.yml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 comment.manager: class: MonProjet\CommentBundle\Manager\CommentManager arguments: [@doctrine.orm.entity_manager, @form.factory, @router, @security.context, @session, @mon.comment.form, %mon_comment.comment.class%,"@=container.hasParameter('fos_user.model.user.class') ? parameter('fos_user.model.user.class') : null"] comment.listener: class: MonProjet\CommentBundle\Listener\CommentListener arguments: ['@comment.manager'] tags: - { name: doctrine.event_listener, event: preRemove, method: preRemove }
CommentListener:
Merci d'avance pour votre aide.
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 <?php namespace MonProjet\CommentBundle\Listener; use Doctrine\ORM\Event\LifecycleEventArgs; use MonProjet\CommentBundle\Interfaces\CommentableInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Doctrine\ORM\Events; use MonProjet\CommentBundle\Manager\CommentManager; class CommentListener{ public $manager; public function __construct(CommentManager $manager) { $this->manager = $manager; } public function preRemove(LifecycleEventArgs $args) { $model = $args->getEntity(); if($model instanceof CommentableInterface) { $this->manager->preDeleteComment($model); } } public function getSubscribedEvents() { return [ Events::preRemove ]; } }
Partager