<?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\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
/**
*
* @Route("/")
* @Security("is_granted('ROLE_USER')", message="vous devez être connecté pour accéder à la ressource")
*/
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 $entityManager): Response
{
$news = new News();
$form = $this->createForm(NewsType::class, $news);
$news->setAuthor($this->getUser());
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->persist($news);
$entityManager->flush();
$this->addFlash(
'success',
'Nouvelle Article crée !'
);;
return $this->redirectToRoute('news_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('news/new.html.twig', [
'news' => $news,
'form' => $form,
]);
}
/**
* @Route("/news/edit/{id}", name="news_edit", methods={"GET", "POST"})
* @Security("is_granted('ROLE_USER') and user.getEmail() === news.getAuthor().getEmail()", message="cette news ne vous appartients pas")
*/
public function edit(Request $request, News $news, EntityManagerInterface $entityManager): Response
{
$form = $this->createForm(NewsType::class, $news);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->flush();
return $this->redirectToRoute('news_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('news/edit.html.twig', [
'news' => $news,
'form' => $form,
]);
}
/**
* @Route("/news/delete/{id}", name="news_delete", methods={"GET", "POST"})
* @Security("is_granted('ROLE_USER') and user.getEmail() === news.getAuthor().getEmail()", message="cette resource que vous voulez effacer ne vous appartient pas")
*/
public function delete(Request $request, News $news, EntityManagerInterface $entityManager): Response
{
if ($this->isCsrfTokenValid('delete'.$news->getId(), $request->request->get('_token'))) {
$entityManager->remove($news);
$entityManager->flush();
}
return $this->redirectToRoute('news_index', [], Response::HTTP_SEE_OTHER);
}
/**
* @Route("/news/{id}", name="news_show", methods={"GET"})
*/
public function show(News $news): Response
{
return $this->render('news/show.html.twig', [
'news' => $news,
]);
}
}