Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
95.12% |
39 / 41 |
|
33.33% |
1 / 3 |
CRAP | |
0.00% |
0 / 1 |
MainController | |
95.12% |
39 / 41 |
|
33.33% |
1 / 3 |
4 | |
0.00% |
0 / 1 |
home | |
100.00% |
11 / 11 |
|
100.00% |
1 / 1 |
1 | |||
show | |
96.55% |
28 / 29 |
|
0.00% |
0 / 1 |
2 | |||
list | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace App\Controller\Front; |
4 | |
5 | use App\Models\MovieModel; |
6 | use App\Repository\CastingRepository; |
7 | use App\Repository\MovieRepository; |
8 | use App\Repository\ReviewRepository; |
9 | use App\Services\OmdbApiRomain; |
10 | use Symfony\Component\HttpFoundation\Response; |
11 | use Symfony\Component\Routing\Annotation\Route; |
12 | use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; |
13 | use Symfony\Component\HttpFoundation\Request; |
14 | |
15 | class MainController extends AbstractController |
16 | { |
17 | /** |
18 | * page par défaut |
19 | * |
20 | * @Route("/", name="default", methods={"GET", "POST"}) |
21 | * |
22 | * @return Response |
23 | */ |
24 | public function home(Request $request, MovieRepository $movieRepository, OmdbApiRomain $a): Response |
25 | { |
26 | // TODO : récuperer la liste de tout les films |
27 | // ! On utilise MovieModel tant que l'on a pas de BDD |
28 | // $allMovies = MovieModel::getAllMovies(); |
29 | // ? BDD: repository, Movie : MovieRepository : injection de dépendance |
30 | $allMovies = $movieRepository->findAll(); |
31 | |
32 | dump($allMovies); |
33 | |
34 | // TODO : afficher la valeur de la session 'favoris' |
35 | // ? pour accèder à la session, il me faut la requete |
36 | // ? pour avoir la requete, je demande à Symfony : Injection de dépendance |
37 | $session = $request->getSession(); |
38 | dump($session->get("favoris")); |
39 | |
40 | // la méthode render() prend 2 paramètres: |
41 | // * le nom du fichier de vue que l'on veux utiliser |
42 | // le chemin du fichier tiwg commence dans le dossier templates |
43 | // * un tableau de donnée à afficher (optionnel) |
44 | // cette méthode renvoit un objet Reponse, on va pouvoir le renvoyer |
45 | $demoData = "Bonjour du mardi matin."; |
46 | $twigResponse = $this->render("front/main/home.html.twig", |
47 | [ |
48 | // les données se passe par un tableau associatif |
49 | // la clé du tableau deviendra le nom de la variable dans twig |
50 | "monTexteKilEstBo" => $demoData, |
51 | // TODO : fournir les données à twig |
52 | "movieList" => $allMovies |
53 | ]); |
54 | |
55 | return $twigResponse; |
56 | } |
57 | |
58 | /** |
59 | * affichage des détails d'un film |
60 | * |
61 | * @Route("/movies/{id}", name="app_front_movie_show", requirements={"id":"\d+"} ,methods={"GET"}) |
62 | * |
63 | * @return Response |
64 | */ |
65 | public function show($id, |
66 | MovieRepository $movieRepository, |
67 | CastingRepository $castingRepository, |
68 | ReviewRepository $reviewRepository |
69 | ): Response |
70 | { |
71 | // TODO : récuperer le film avec son id |
72 | // $movie = MovieModel::getMovie($id); |
73 | // j'ai une BDD maintenant |
74 | // BBD > Repository > Movie > MovieRepository |
75 | $movie = $movieRepository->find($id); |
76 | // dd($movie); |
77 | // ! ERREUR $movie == null si le film n'a pas été trouvé en BDD |
78 | if ($movie === null) { |
79 | throw $this->createNotFoundException("Ce film n'existe pas"); |
80 | } |
81 | |
82 | // TODO : récuperer les castings du film, trié par creditOrder |
83 | // BBD : Repository, Casting : CastingRepository : Injection de dépendance |
84 | $allCastingFromMovie = $castingRepository->findBy( |
85 | // * critere de recherche |
86 | // on manipule TOUJOURS des objets |
87 | // donc on parle propriété : movie (de l'objet Casting) |
88 | // cette propriété doit être égale à l'objet $movie |
89 | [ |
90 | "movie" => $movie |
91 | ], |
92 | // * orderBy |
93 | // on manipule TOUJOURS des objets |
94 | // on donne la propriété sur laquelle on trie |
95 | // en valeur, on donne le type de tri : ASC/DESC |
96 | [ |
97 | "creditOrder" => "ASC" |
98 | ] |
99 | ); |
100 | // dump($allCastingFromMovie); |
101 | |
102 | // TODO : faire une requete avec la jointure entre Casting et Person |
103 | $castingsWithDQL = $castingRepository->findByMovieOrderByCreditOrderWithPerson($movie); |
104 | dump($castingsWithDQL); |
105 | |
106 | // TODO : aller chercher les review du film |
107 | // BBD, repository, Review : injection |
108 | $allReviews = $reviewRepository->findBy( |
109 | [ |
110 | "movie" => $movie |
111 | ], |
112 | [ |
113 | "rating" => "DESC" |
114 | ] |
115 | ); |
116 | |
117 | $twigResponse = $this->render("front/main/show.html.twig", |
118 | [ |
119 | "movieId" => $id, |
120 | // TODO fournir le film à ma vue |
121 | "movieForTwig" => $movie, |
122 | // TODO : fournir les casting à la vue |
123 | "allCastingFromBDD" => $allCastingFromMovie, |
124 | // TODO : fournir les reviews |
125 | "allReviewFromBDD" => $allReviews |
126 | ]); |
127 | |
128 | |
129 | return $twigResponse; |
130 | } |
131 | |
132 | /** |
133 | * la liste de résultat de recherche |
134 | * |
135 | * @Route("/search", name="app_front_movie_search") |
136 | * |
137 | * @return Response |
138 | */ |
139 | public function list(): Response |
140 | { |
141 | // ici j'économise l'affectation à une variable |
142 | return $this->render("front/main/list.html.twig"); |
143 | } |
144 | } |