<?php
namespace App\Controller;
use App\Entity\News;
use App\Form\NewsType;
use App\Repository\NewsRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
/**
* @Route ("/")
* @Security ("is_granted('ROLE_USER')", message="vous devez être connecté")
*/
class NewsController extends AbstractController
{
/**
* @Route("/", name="news_index", methods={"GET"})
*/
public function index(NewsRepository $newsRepository): Response
{
return $this->render('news/index.html.twig', [
'news' => $newsRepository->findAll(),
]);
}
/**
* @Route("/new", name="news_new", methods={"GET", "POST"})
*/
public function new(Request $request, EntityManagerInterface $em): Response
{
$news = new News();
$news->setAuthor($this->getUser());
$form = $this->createForm(NewsType::class, $news);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em->persist($news);
$em->flush();
// IMPORTANT : redirect vers edit (ID requis pour PJ)
return $this->redirectToRoute('news_edit', [
'id' => $news->getId()
]);
}
return $this->renderForm('news/new.html.twig', [
'form' => $form,
'news' => $news,
]);
}
/**
* @Route("/news/edit/{id}", name="news_edit", methods={"GET", "POST"})
* @Security("user.getEmail() === news.getAuthor().getEmail()", message="accès refusé")
*/
public function edit(Request $request, News $news, EntityManagerInterface $em): Response
{
$form = $this->createForm(NewsType::class, $news);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em->flush();
$this->addFlash('success', 'News mise à jour');
}
return $this->renderForm('news/edit.html.twig', [
'form' => $form,
'news' => $news,
]);
}
/**
* @Route("/news/{id}", name="news_show", methods={"GET"})
*/
public function show(News $news): Response
{
return $this->render('news/show.html.twig', [
'news' => $news,
]);
}
/**
* @Route("/news/delete/{id}", name="news_delete", methods={"POST"})
* @Security("user.getEmail() === news.getAuthor().getEmail()", message="accès refusé")
*/
public function delete(Request $request, News $news, EntityManagerInterface $em): Response
{
if ($this->isCsrfTokenValid('delete' . $news->getId(), $request->request->get('_token'))) {
$em->remove($news);
$em->flush();
}
return $this->redirectToRoute('news_index');
}
}