Example #1
0
 /**
  * @Secure(roles="ROLE_AUTEUR")
  */
 public function modifierAction(Article $article)
 {
     // --- Dans le cas où vous avez un champ "articleCompetences" dans le formulaire - 1/3 ---
     // On place dans un tableau les articleCompetences que contient l'article avant la soumission du formulaire
     // Si certains d'entre eux n'existent plus après la soumission, il faudra donc les supprimer
     $listeAc = array();
     foreach ($article->getArticleCompetences() as $ac) {
         $listeAc[] = $ac;
     }
     // --- Fin du cas 1/3 ---
     // On utilise le ArticleEditType
     $form = $this->createForm(new ArticleEditType(), $article);
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         $form->bind($request);
         if ($form->isValid()) {
             // --- Dans le cas où vous avez un champ "articleCompetences" dans le formulaire - 2/3 ---
             // Au même titre que dans l'action d'ajout d'un article, on doit enregistrer
             // l'article et ses articleCompetences en deux fois
             $article->getArticleCompetences()->clear();
             // --- Fin du cas 2/3 ---
             // On enregistre l'article
             $em = $this->getDoctrine()->getManager();
             $em->persist($article);
             $em->flush();
             // --- Dans le cas où vous avez un champ "articleCompetences" dans le formulaire - 3/3 ---
             // On enregistre les articleCompetences (propriétaire) maintenant que $article a un id
             foreach ($form->get('articleCompetences')->getData() as $ac) {
                 $ac->setArticle($article);
                 $em->persist($ac);
             }
             // Et on supprime les articleCompetences qui existaient au début mais plus maintenant
             foreach ($listeAc as $originalAc) {
                 foreach ($form->get('articleCompetences')->getData() as $ac) {
                     // Si $originalAc existe dans le formulaire, on sort de la boucle car pas besoin de la supprimer
                     if ($originalAc == $ac) {
                         continue 2;
                     }
                 }
                 // $originalAc n'existe plus dans le formulaire, on la supprime
                 $em->remove($originalAc);
             }
             $em->flush();
             // --- Fin du cas 3/3 ---
             // On définit un message flash
             $this->get('session')->getFlashBag()->add('info', 'Article bien modifié');
             return $this->redirect($this->generateUrl('sdzblog_voir', array('slug' => $article->getSlug())));
         }
     }
     return $this->render('SdzBlogBundle:Blog:modifier.html.twig', array('form' => $form->createView(), 'article' => $article));
 }