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 | } |