src/Controller/ArticlesController.php line 188

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Articles;
  4. use App\Entity\Category;
  5. use App\Entity\Comments;
  6. use App\Form\ArticlesType;
  7. use App\Form\CommentsType;
  8. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepositoryInterface;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Doctrine\ORM\EntityRepository;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. class ArticlesController extends AbstractController
  16. {
  17.     // Modèle REST : 
  18.     // récupérer tous les articles
  19.     // route (= routing) intercepte les URL & demande ce qu'il doit faire
  20.     
  21.     #[Route('/articles'name'app_articles')]
  22.     public function index(): Response
  23.     {
  24.         return $this->render('articles/index.html.twig', [
  25.             'controller_name' => 'ArticlesController',
  26.         ]);
  27.     }
  28.     #[Route('/article/{id}/delete'name'delete_article'requirements: ['id' => '\d+'])]
  29.     public function deleteArticle(EntityManagerInterface $entityManagerstring $idRequest $request): Response {
  30.         // si j'ai un post
  31.         // je récupère le paramètre POST ID
  32.         $id $request->get('id');
  33.         $article $entityManager->getRepository(Articles::class)->find($id);
  34.         if($picture $article->getPicture()) {
  35.             @unlink(' ./images/articles/' $picture); // si j'ai 1 img, la supprimer lors de la suppression de l'article
  36.         }
  37.         $entityManager->remove($article);
  38.         $entityManager->flush();
  39.         // rediriger vers la page d'accueil avec un msg de confirmation
  40.         $this->addFlash('confirmation''L\'article a bien été supprimé !');
  41.         return $this->redirectToRoute('app_home');
  42.     }   
  43.     // route multiple
  44.     // récupérer 1 article
  45.     #[Route('/article/{id}'name'show_article_by_id'requirements:['id' => '\d+'])]
  46.     public function showArticle(EntityManagerInterface $entityManagerstring $idRequest $request): Response
  47.     {
  48.         $idArticle $request->get("id");
  49.         $article $entityManager->getRepository(Articles::class)->find($idArticle);
  50.         // récupérer les commentaires valides pour cet article
  51.         $comments $entityManager->getRepository(Comments::class)->findAllValidComments($idArticle);
  52.         $comment = new Comments();
  53.         $form $this->createForm(CommentsType::class, $comment);
  54.         $form->handleRequest($request);
  55.         if($form->isSubmitted() && $form->isValid()) {
  56.             $comment->setArticle($article);
  57.             $comment->setDate(new \DateTime);
  58.             $comment->setUser($this->getUser());
  59.             $comment->setIsValid(false);
  60.             $entityManager->persist($comment);
  61.             $entityManager->flush();
  62.             // réinitialiser le formulaire
  63.             $comment = new Comments();
  64.             $form $this->createForm(CommentsType::class, $comment);
  65.             $this->addFlash('confirmation''Votre commentaire sera examiné sous 24 h !');
  66.             
  67.         }
  68.        
  69.         // récupérer l'article en BDD avec l'id de mon article
  70.         // comment récupérer l'id (qui est paramétré dans l'URL)
  71.         // récupérer le paramètre id via l'argument $id
  72.         $article $entityManager->getRepository(Articles::class)->findBy(["id" => $id]) [0];
  73.         // dd($article);
  74.         // récupérer en BDD les 3 articles les + récents liés à cette category
  75.         // différent de l'article en cours
  76.         // => devoir coder la requête dans Articles Repository
  77.         $relatedArticles $entityManager->getRepository(Articles::class)->findLastThreeRelatedArticles
  78.         ($article->getCategory(), $id);
  79.       //  dd($category->getName());
  80.         return $this->render('articles/article.html.twig', [
  81.             'article' => $article,
  82.             'relatedArticles' => $relatedArticles,
  83.             'form_comment' => $form,
  84.             'comments' => $comments
  85.         ]);
  86.     }
  87.      /**
  88.      * CETTE MÉTHODE PERMET DE MODIFIER UN ARTICLE
  89.      */
  90.     #[Route('/article/{id}/modify'name'modify_article'requirements: ['id' => '\d+'])]
  91.     public function modifyArticle(EntityManagerInterface $entityManagerstring $idRequest $request) {
  92.         // récupérer l'article en BDD qui a l'id $id
  93.         // ensuite créer le formulaire via ArticlesType
  94.         // render la page articles/article-modify.html.twig
  95.         // il faut render le formulaire ds cte page
  96.         $article $entityManager->getRepository(Articles::class)->find($id); // récupérer l'article en BDD
  97.         $form $this->createForm(ArticlesType::class, $article); // créer le formulaire
  98.         $form->handleRequest($request);
  99.         if($form->isSubmitted() && $form->isValid()) {
  100.             if($file $article->getPosterFile()) {
  101.                 $fileName md5(uniqid()) . '.' $file->guessExtension(); // je formate le nom
  102.                 $file->move('./images/articles/' $fileName); // je le copie sur le serveur
  103.                 // ('/images/articles/') plutôt car cela concerne les articles
  104.                 $article->setPicture($fileName);
  105.             }
  106.             $entityManager->persist($article);
  107.             $entityManager->flush();
  108.             $this->addFlash('confirmation''Votre article a bien été modifié en BDD');
  109.             return $this->redirectToRoute('app_route');
  110.         }
  111.         return $this->render('articles/modify.html.twig', [ // avec render la page articles/article/modify.html.twig
  112.         'articles_form' => $form->createView(), // le formulaire présent dans la page avec render
  113.         'article' => $article
  114.         ]);
  115.     }
  116.     /**
  117.     * Cette method permet d'afficher tous les articles liés à une catégorie    
  118.     */
  119.     #[Route('/articles/{id}'name'show_articles_by_category'requirements:['id' => '\d+'])]
  120.     public function showArticleByCategory(EntityManagerInterface $entityManagerstring $id): Response
  121.     {
  122.         // récupérer tous les articles liés à l'id category récupéré sur la root
  123.         // comment récupérer l'id de la category
  124.         // attention pour (Articles::class) & (Category::class) il faut enlever la dernière lettre de Articles & Category
  125.         // pour les recharger
  126.         $articles $entityManager->getRepository(Articles::class)->findBy(["category"=> $id]);
  127.         $category $entityManager->getRepository(Category::class)->find($id);
  128.         return $this->render('articles/index.html.twig', [
  129.             'listArticles' => $articles,
  130.             'category' => $category->getName()
  131.         ]);
  132.     }
  133.  /**
  134.     * Cette method permet de créer 1 article dans 1 nouveau formulaire  
  135.     */
  136.     #[Route('/articles/new'name'create_article')]
  137.     public function createArticle(EntityManagerInterface $entityManagerRequest $request): Response
  138.     {
  139.     
  140.         $article = new Articles();
  141.         $form $this->createForm(ArticlesType::class, $article); // on rajoute après class : le $article
  142.         $form->handleRequest($request);
  143.         // dd($form->getData());
  144.         // si j'ai 1 category de rentrée dans le form
  145.         // je vais la créer
  146.         // je set cette category créée en BDD dans mon article
  147.         // sinon je fais ce qu'il y a en dessous
  148.                 if($form->isSubmitted() && $form->isValid()) {
  149.                         if($file $article->getPosterFile()) {
  150.                             $fileName md5(uniqid()) . '.' $file->guessExtension(); // je formate le nom
  151.                             $file->move('./images/articles/' $fileName); // je le copie sur le serveur
  152.                             // ('/images/articles/') plutôt car cela concerne les img des articles
  153.                             // qui peuvent être changées à tout moment c'est pourquoi les img se trouvent 
  154.                             // dans public > images > articles
  155.                             // bien vérifier dans la BDD que l'article est bien créé + l'img (avec la suite de n°)
  156.                             // se trouve dans le serveur
  157.         
  158.                             $article->setPicture($fileName);
  159.                         }
  160.                             // 1ère solution
  161.                             $entityManager->persist($article);
  162.                             $entityManager->flush();
  163.                 
  164.                             $this->addFlash('confirmation''L\'article a bien été ajouté !');
  165.                             return $this->redirectToRoute('app_home');
  166.                     }
  167.                     return $this->render('articles/new.html.twig', [
  168.                         'add_article_form' => $form->createView()
  169.                     ]);
  170.     }
  171.     // si j'ai 1 POST
  172.     // je récupère le paramètre ID POST
  173.     #[Route('/delete'name'delete')]
  174.     public function delete(EntityManagerInterface $entityManagerRequest $request): Response
  175.     {
  176.         $id $request->get('id');
  177.         $article $entityManager->getRepository(Articles::class)->find($id);
  178.         if($picture $article->getPicture()) { // si j'ai 1 img, je la supprime lors de la suppresion de l'article
  179.             @unlink('./images/articles/' $picture);
  180.         }
  181.         $entityManager->remove($article);
  182.         $entityManager->flush();
  183.         return new Response(Response::HTTP_OK);
  184.         
  185.     }
  186. }