Bonjour,
Voilà mon problème du jour. J'étais en train d'étudier FOSCommentBundle quand je suis tombé sur ce petit bout de code que je ne comprend pas. Dans le fichier FOS/CommentBundle/Entity/CommentManager.php J'ai de la peine à comprendre le constructeur:
Il est utilisé dans le controller CommentController dans l'action createAction à cet endroit du code:
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 /** * Constructor. * * @param EntityManager $em * @param string $class * @param SortingFactory $factory */ public function __construct(EntityManager $em, $class, SortingFactory $factory) { $this->em = $em; $this->repository = $em->getRepository($class); $this->class = $em->getClassMetadata($class)->name; $this->setSortingFactory($factory); }
La ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 if ('POST' == $request->getMethod()) { $form->bindRequest($request); if ($form->isValid() && $this->container->get('fos_comment.creator.comment')->create($comment)) { return $this->onCreateSuccess($form); } } return $this->onCreateError($form); }fait appel à la méthode create de la classe FOS\CommentBundle\Creator\DefaultCommentCreator
Code : Sélectionner tout - Visualiser dans une fenêtre à part get('fos_comment.creator.comment')->create($comment)qui fait ensuite appel à la méthode addComment de la classe CommentManager.
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 /** * {@inheritDoc} */ public function create(CommentInterface $comment) { $this->commentBlamer->blame($comment); if ($this->spamDetection->isSpam($comment)) { return false; } $this->commentManager->addComment($comment); return true; }
En fait ce que je ne comprend pas comment l' entity Manager $em créé par le contructeur de CommentManager.php est équivalent à la ligne suivante:Je ne comprend pas à quel moment le contructeur est appelé et quels arguments lui sont passés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $em = $this->getDoctrine()->getEntityManager();
edit: En fait je me rend compte que c'est aussi ambigu pour moi au moment ou la méthode create de la classe FOS\CommentBundle\Creator\DefaultCommentCreator est appelée. A ce moment là une instance de cette classe est créée mais quels arguments sont passés dans son constructeur :
?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 /** * Constructor. * * @param CommentManagerInterface $commentManager * @param CommentBlamerInterface $commentBlamer * @param SpamDetectionInterface $spamDetection */ public function __construct(CommentManagerInterface $commentManager, CommentBlamerInterface $commentBlamer, SpamDetectionInterface $spamDetection) { $this->commentManager = $commentManager; $this->commentBlamer = $commentBlamer; $this->spamDetection = $spamDetection; }
Partager