src/Controller/NewsController.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\News;
  4. use App\Form\NewsType;
  5. use App\Repository\NewsRepository;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  12. /**
  13.  * @Route ("/")
  14.  * @Security ("is_granted('ROLE_USER')", message="vous devez être connecté")
  15.  */
  16. class NewsController extends AbstractController
  17. {
  18.     /**
  19.      * @Route("/", name="news_index", methods={"GET"})
  20.      */
  21.     public function index(NewsRepository $newsRepository): Response
  22.     {
  23.         return $this->render('news/index.html.twig', [
  24.             'news' => $newsRepository->findAll(),
  25.         ]);
  26.     }
  27.     /**
  28.      * @Route("/new", name="news_new", methods={"GET", "POST"})
  29.      */
  30.     public function new(Request $requestEntityManagerInterface $em): Response
  31.     {
  32.         $news = new News();
  33.         $news->setAuthor($this->getUser());
  34.         $form $this->createForm(NewsType::class, $news);
  35.         $form->handleRequest($request);
  36.         if ($form->isSubmitted() && $form->isValid()) {
  37.             $em->persist($news);
  38.             $em->flush();
  39.             // IMPORTANT : redirect vers edit (ID requis pour PJ)
  40.             return $this->redirectToRoute('news_edit', [
  41.                 'id' => $news->getId()
  42.             ]);
  43.         }
  44.         return $this->renderForm('news/new.html.twig', [
  45.             'form' => $form,
  46.             'news' => $news,
  47.         ]);
  48.     }
  49.     /**
  50.      * @Route("/news/edit/{id}", name="news_edit", methods={"GET", "POST"})
  51.      * @Security("user.getEmail() === news.getAuthor().getEmail()", message="accès refusé")
  52.      */
  53.     public function edit(Request $requestNews $newsEntityManagerInterface $em): Response
  54.     {
  55.         $form $this->createForm(NewsType::class, $news);
  56.         $form->handleRequest($request);
  57.         if ($form->isSubmitted() && $form->isValid()) {
  58.             $em->flush();
  59.             $this->addFlash('success''News mise à jour');
  60.         }
  61.         return $this->renderForm('news/edit.html.twig', [
  62.             'form' => $form,
  63.             'news' => $news,
  64.         ]);
  65.     }
  66.     /**
  67.      * @Route("/news/{id}", name="news_show", methods={"GET"})
  68.      */
  69.     public function show(News $news): Response
  70.     {
  71.         return $this->render('news/show.html.twig', [
  72.             'news' => $news,
  73.         ]);
  74.     }
  75.     /**
  76.      * @Route("/news/delete/{id}", name="news_delete", methods={"POST"})
  77.      * @Security("user.getEmail() === news.getAuthor().getEmail()", message="accès refusé")
  78.      */
  79.     public function delete(Request $requestNews $newsEntityManagerInterface $em): Response
  80.     {
  81.         if ($this->isCsrfTokenValid('delete' $news->getId(), $request->request->get('_token'))) {
  82.             $em->remove($news);
  83.             $em->flush();
  84.         }
  85.         return $this->redirectToRoute('news_index');
  86.     }
  87. }