/**
  * @Secure(roles="ROLE_AUTEUR")
  */
 public function ajouterAction()
 {
     $article = new Article();
     if ($this->getUser()) {
         // On définit le User par défaut dans le formulaire (utilisateur courant)
         $article->setUser($this->getUser());
     }
     // On crée le formulaire grâce à l'ArticleType
     $form = $this->createForm(new ArticleType(), $article);
     // On récupère la requête
     $request = $this->getRequest();
     // On vérifie qu'elle est de type POST
     if ($request->getMethod() == 'POST') {
         // On fait le lien Requête <-> Formulaire
         $form->bind($request);
         // On vérifie que les valeurs rentrées sont correctes
         if ($form->isValid()) {
             // --- Début de notre fonctionnalité BigBrother ---
             // On crée l'évènement
             $event = new MessagePostEvent($article->getContenu(), $this->getUser());
             // On déclenche l'évènement
             $this->get('event_dispatcher')->dispatch(BigbrotherEvents::onMessagePost, $event);
             // On récupère ce qui a été modifié par le ou les listener(s), ici le message
             $article->setContenu($event->getMessage());
             // --- Fin de notre fonctionnalité BigBrother ---
             // --- Dans le cas où vous avez un champ "articleCompetences" dans le formulaire - 1/2 ---
             // Cette ligne est nécessaire pour qu'on puisse enregistrer en bdd en deux étapes :
             // * D'abord l'article tout seul (c'est pour ça qu'on enlève les articleCompetences)
             // * Puis les articleCompetences, juste après, car on a besoin de l'id de l'$article
             //   Or cet id n'est attribué qu'au flush, car on utilise l'AUTOINCREMENT de MySQL !
             $article->getArticleCompetences()->clear();
             // --- Fin du cas 1/2 ---
             // On enregistre l'objet $article dans la base de données
             $em = $this->getDoctrine()->getManager();
             $em->persist($article);
             $em->flush();
             // --- Dans le cas où vous avez un champ "articleCompetences" dans le formulaire - 2/2 ---
             // Maintenant que l'artiche est enregistré et dispose d'un id,
             // On parcourt les articleCompetences pour leur ajouter l'article et les persister manuellement
             // (rappelez-vous, c'est articleCompetence la propriétaire dans sa relation avec Article !)
             foreach ($form->get('articleCompetences')->getData() as $ac) {
                 $ac->setArticle($article);
                 $em->persist($ac);
             }
             $em->flush();
             // --- Fin du cas 2/2 ---
             // On définit un message flash
             $this->get('session')->getFlashBag()->add('info', 'Article bien ajouté');
             // On redirige vers la page de visualisation de l'article nouvellement créé
             return $this->redirect($this->generateUrl('sdzblog_voir', array('slug' => $article->getSlug())));
         }
     }
     // À ce stade :
     // - soit la requête est de type GET, donc le visiteur vient d'arriver sur la page et veut voir le formulaire
     // - soit la requête est de type POST, mais le formulaire n'est pas valide, donc on l'affiche de nouveau
     return $this->render('SdzBlogBundle:Blog:ajouter.html.twig', array('form' => $form->createView()));
 }