src/Controller/Back/PostController.php line 86

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Back;
  3. use App\Entity\Post;
  4. use App\Form\PostType;
  5. use App\Repository\PostRepository;
  6. use App\Services\UploadFileService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\File\UploadedFile;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\String\Slugger\SluggerInterface;
  13. /**
  14.  * @Route("/admin")
  15.  */
  16. class PostController extends AbstractController
  17. {
  18.     /**
  19.      * @var EntityManagerInterface
  20.      */
  21.     private EntityManagerInterface $em;
  22.     /**
  23.      * @var SluggerInterface
  24.      */
  25.     private SluggerInterface $slugger;
  26.     /**
  27.      * @var UploadFileService
  28.      */
  29.     private UploadFileService $uploadFileService;
  30.     public function __construct(EntityManagerInterface $emSluggerInterface $sluggerUploadFileService $uploadFileService)
  31.     {
  32.         $this->em $em;
  33.         $this->slugger $slugger;
  34.         $this->uploadFileService $uploadFileService;
  35.     }
  36.     /**
  37.      * @Route("/post/list", name="back_post_list")
  38.      */
  39.     public function list(PostRepository $postRepository)
  40.     {
  41.         return $this->render('back/post/list.html.twig', [
  42.             'posts' => $postRepository->findBy([], ['id' => 'DESC'])
  43.         ]);
  44.     }
  45.     /**
  46.      * @Route("/post/add", name="back_post_add")
  47.      */
  48.     public function add(Request $request)
  49.     {
  50.         $post = new Post();
  51.         $form $this->createForm(PostType::class, $post)->handleRequest($request);
  52.         if ($form->isSubmitted() && $form->isValid()) {
  53.             $sluggedName $this->slugger->slug($post->getTitle())->lower();
  54.             $post->setSlug($sluggedName);
  55.             foreach ($post->getPostImages() as $image) {
  56.                 $filename $this->uploadFileService->uploadImage($image->getFilename());
  57.                 $image->setFilename($filename);
  58.             }
  59.             $this->em->persist($post);
  60.             $this->em->flush();
  61.             $this->addFlash('success''Actualité créée');
  62.             return $this->redirectToRoute('back_post_list');
  63.         }
  64.         return $this->render('back/post/add.html.twig', [
  65.             'form' => $form->createView()
  66.         ]);
  67.     }
  68.     /**
  69.      * @Route("/post/edit/{id}", name="back_post_edit")
  70.      */
  71.     public function edit(Post $postRequest $request)
  72.     {
  73.         $arrayImages = [];
  74.         foreach ($post->getPostImages() as $image) {
  75.             $arrayImages[$image->getId()] = $image->getFilename();
  76.         }
  77.         $form $this->createForm(PostType::class, $post)->handleRequest($request);
  78.         if ($form->isSubmitted() && $form->isValid()) {
  79.             $sluggedName $this->slugger->slug($post->getTitle())->lower();
  80.             $post->setSlug($sluggedName);
  81.             foreach ($post->getPostImages() as $image) {
  82.                 if ($image->getFilename() instanceof UploadedFile) {
  83.                     $filename $this->uploadFileService->uploadImage($image->getFilename());
  84.                     $image->setFilename($filename);
  85.                 }else {
  86.                     if (array_key_exists($image->getId(), $arrayImages)) {
  87.                         $image->setFilename($arrayImages[$image->getId()]);
  88.                     }
  89.                 }
  90.             }
  91.             $this->em->persist($post);
  92.             $this->em->flush();
  93.             $this->addFlash('success''Actualité éditée');
  94.             return $this->redirectToRoute('back_post_list');
  95.         }
  96.         return $this->render('back/post/edit.html.twig', [
  97.             'form' => $form->createView(),
  98.             'post' => $post
  99.         ]);
  100.     }
  101.     /**
  102.      * @Route("/post/remove/{id}", name="back_post_remove")
  103.      */
  104.     public function remove(Post $post)
  105.     {
  106.         $this->em->remove($post);
  107.         $this->em->flush();
  108.         $this->addFlash('success''Actualité supprimée');
  109.         return $this->redirectToRoute('back_post_list');
  110.     }
  111. }