<?php
namespace App\Controller\Back;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Post;
use App\Form\PostType;
use App\Services\UploadFileService;
use App\Repository\PostRepository;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\String\Slugger\SluggerInterface;
/**
* @Route("/admin/actualites")
*/
class PostController extends AbstractController
{
/**
* @var EntityManagerInterface
*/
private $em;
/**
* @var SluggerInterface
*/
private $slugger;
/**
* @var UploadFileService
*/
private UploadFileService $uploadFileService;
public function __construct(EntityManagerInterface $em, SluggerInterface $slugger, UploadFileService $uploadFileService)
{
$this->em = $em;
$this->slugger = $slugger;
$this->uploadFileService = $uploadFileService;
}
/**
* @Route("/liste", name="back_post_list")
*/
public function list(PostRepository $postRepository)
{
return $this->render('back/post/list.html.twig', [
'posts' => $postRepository->findBy([], ['id' => 'DESC'])
]);
}
/**
* @Route("/ajouter", name="back_post_add")
*/
public function add(Request $request)
{
$post = new Post();
$form = $this->createForm(PostType::class, $post)->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if ($post->getImage() instanceof UploadedFile) {
$image = $this->uploadFileService->uploadImage($post->getImage(), UploadFileService::POST_IMAGE_DIR);
$post->setImage($image);
}
$post->setSlug($this->slugger->slug($post->getTitle())->lower());
$this->em->persist($post);
$this->em->flush();
$this->addFlash('success', 'Post créé !');
return $this->redirectToRoute('back_post_list');
}
return $this->render('back/post/add.html.twig', [
'form' => $form->createView(),
'post' => $post
]);
}
/**
* @Route("/supprimer/{id}", name="back_post_delete")
*/
public function delete(Post $post)
{
$this->em->remove($post);
$this->em->flush();
$this->addFlash('success', 'Post supprimé !');
return $this->redirectToRoute('back_post_list');
}
/**
* @Route("/edit/{id}", name="back_post_edit")
*/
public function edit(Post $post, Request $request)
{
$oldImage = $post->getImage();
$form = $this->createForm(PostType::class, $post)->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
if ($post->getImage() instanceof UploadedFile) {
$image = $this->uploadFileService->uploadImage($post->getImage(), UploadFileService::POST_IMAGE_DIR);
$post->setImage($image);
} else {
$post->setImage($oldImage);
}
$post->setSlug($this->slugger->slug($post->getTitle())->lower());
$this->em->flush();
$this->addFlash('success', 'Post édité !');
return $this->redirectToRoute('back_post_list');
}
return $this->render('back/post/edit.html.twig', [
'form' => $form->createView(),
'post' => $post
]);
}
}