fonctionnement du CommentManager dans FOSCommentBundle
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:
Code:
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);
} |
Il est utilisé dans le controller CommentController dans l'action createAction à cet endroit du code:
Code:
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);
} |
La ligne
Code:
get('fos_comment.creator.comment')->create($comment)
fait appel à la méthode create de la classe FOS\CommentBundle\Creator\DefaultCommentCreator
Code:
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;
} |
qui fait ensuite appel à la méthode addComment de la classe CommentManager.
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:
Code:
$em = $this->getDoctrine()->getEntityManager();
Je ne comprend pas à quel moment le contructeur est appelé et quels arguments lui sont passés.
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:
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;
} |
?