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