Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
ReviewController
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
4
100.00% covered (success)
100.00%
1 / 1
 index
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3namespace App\Controller\Front;
4
5use App\Entity\Review;
6use App\Form\ReviewType;
7use App\Repository\MovieRepository;
8use App\Repository\ReviewRepository;
9use Doctrine\ORM\EntityManagerInterface;
10use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
11use Symfony\Component\HttpFoundation\Request;
12use Symfony\Component\HttpFoundation\Response;
13use Symfony\Component\Routing\Annotation\Route;
14
15class ReviewController extends AbstractController
16{
17    /**
18     * @Route("/movies/{id}/review/add", name="app_review_add", requirements={"id": "\d+"})
19     */
20    public function index($id, 
21    MovieRepository $movieRepository, 
22    Request $request,
23    EntityManagerInterface $entityManagerInterface,
24    ReviewRepository $reviewRepository
25    ): Response
26    {
27        // TODO : afficher le nom du film dans le template
28        // BDD, Repository, Movie, MovieRepository : injection de dépendance
29        $movie = $movieRepository->find($id);
30        // ! si le film n'existe pas : 404
31        if ($movie === null){ throw $this->createNotFoundException("ce film n'existe pas");}
32
33        // * createForm
34        // 1. le nom de la classe de formulaire : MonSuperFormulaireType::class
35        // 2. l'objet auquel on est lié
36        // ici on veux créer un nouvel objet, on lui donne alors une nouvelle instance
37        $newReview = new Review();
38        $form = $this->createForm(ReviewType::class, $newReview);
39
40        // TODO : traitement du formulaire
41        // 1. le formulaire ayant générer le HTML et les names des input
42        // il doit récupérer les données tout seul : on lui donne les infos vie l'objet Request (injection de dépendance)
43        $form->handleRequest($request);
44
45        // 2. on vérifie si le formulaire est soumis ou pas
46        // TODO ajouter les contraintes de validations
47        // 3. ajouter le test des contraintes
48        if ($form->isSubmitted() && $form->isValid())
49        {
50            //dd($newReview);
51            /*
52            App\Entity\Review {#496 ▼
53                -id: null
54                -username: "JB avec les radium"
55                -email: "nain@porte.koi"
56                -content: "azaezaegrhtjyuryf"
57                -rating: 5
58                -reactions: array:2 [▼
59                    0 => "think"
60                    1 => "sleep"
61                ]
62                -watchedAt: DateTimeImmutable @1683669600 {#1007 ▼
63                    date: 2023-05-10 00:00:00.0 Europe/Berlin (+02:00)
64                }
65                -movie: null
66                }
67            */
68            $newReview->setMovie($movie);
69
70            // 2 solutions pour persist + flush
71            // EntityManagerInterface : la seule classe qui a le droit de faire persist+flush
72            $entityManagerInterface->persist($newReview);
73            $entityManagerInterface->flush();
74            // Repository de la bonne entité : ReviewRepository
75            // $reviewRepository->add($newReview, true);
76            
77            // Redirection vers la page du film
78            return $this->redirectToRoute("app_front_movie_show", ["id"=> $movie->getId()]);
79        }
80
81        // en 5.4 on change de méthode d'affichage : render => renderForm
82        return $this->renderForm('front/review/index.html.twig', [
83            "movieFromBDD" => $movie,
84            "formulaire" => $form
85        ]);
86    }
87}