Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
95.12% covered (success)
95.12%
39 / 41
33.33% covered (danger)
33.33%
1 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
MainController
95.12% covered (success)
95.12%
39 / 41
33.33% covered (danger)
33.33%
1 / 3
4
0.00% covered (danger)
0.00%
0 / 1
 home
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
1
 show
96.55% covered (success)
96.55%
28 / 29
0.00% covered (danger)
0.00%
0 / 1
2
 list
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Controller\Front;
4
5use App\Models\MovieModel;
6use App\Repository\CastingRepository;
7use App\Repository\MovieRepository;
8use App\Repository\ReviewRepository;
9use App\Services\OmdbApiRomain;
10use Symfony\Component\HttpFoundation\Response;
11use Symfony\Component\Routing\Annotation\Route;
12use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
13use Symfony\Component\HttpFoundation\Request;
14
15class 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}