<< TP 4
TP 6 >>

5. Premier Contrôleur





5.1. Qu'est ce qu'un contrôleur

Les contrôleurs qui dérivent de la classe AbstractController permettent de réaliser des actions et sont associés à des routes qui les identifient.

Une route est définie à partir de la racine du site localhost:8000/ et peut contenir des paramètres. Nous utiliserons, par exemple, la route /conducteur/supprimer/{id} afin de supprimer un conducteur dans la base de données. La partie {id} située en fin de route représente l'identifiant du conducteur à supprimer, si on désire supprimer le conducteur d'identifiant 3, on appellera la route :

localhost:8000/conducteur/supprimer/3

Une route peut donc être :

Il est important de bien organiser les routes afin de garder une cohérence qui est nécessaire quand on développe un site web d'envergure.

5.2. Création d'un premier contrôleur général

Dans le répertoire src, créez un sous-répertoire Controller, puis créer un fichier GeneralController.php qui sera chargé de gérer deux routes :

Le code de la classe GeneralController est le suivant :

  1. <?php
  2. namespace App\Controller;
  3.  
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8.  
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Doctrine\DBAL\Connection;
  11.  
  12. /**
  13.  * Contrôleur global
  14.  */
  15. class GeneralController extends AbstractController
  16. {
  17.     // connexion à la base de données
  18.     private $connexion;
  19.  
  20.     /**
  21.      * Constructeur prenant en paramètre la connextion à la base de données
  22.      */
  23.     public function __construct(Connection $connexion)
  24.     {
  25.         $this->connexion = $connexion;
  26.     }
  27.  
  28.     /**
  29.      * Route / qui pointe sur index.php
  30.      */
  31.     #[Route('/', name: 'index')]
  32.     public function homepage(Request $request,
  33.         EntityManagerInterface $entityManager) : Response {
  34.  
  35.         return $this->render("base.html.twig");
  36.  
  37.     }
  38.  
  39.     /**
  40.      * Route qui permet de supprimer toutes les tables de la base de données
  41.      * cette route est utilisée pour des tests et le débogage
  42.      */
  43.     #[Route('/drop/tables', name: 'drop_tables')]
  44.     public function drop_tables(Request $request,
  45.         EntityManagerInterface $entityManager) : Response {
  46.  
  47.         // Execute the SQL statement
  48.         $this->connexion->executeStatement('DROP TABLE IF EXISTS equipement_vehicule');
  49.         $this->connexion->executeStatement('DROP TABLE IF EXISTS vehicule');
  50.         $this->connexion->executeStatement('DROP TABLE IF EXISTS equipement');
  51.         $this->connexion->executeStatement('DROP TABLE IF EXISTS conducteur');
  52.  
  53.         //
  54.         // On aurait pu utiliser le code suivant pour afficher
  55.         // la page index
  56.         //
  57.         // return $this->render("base.html.twig");
  58.         //
  59.         // Cependant il est préférable d'utiliser le code ci-dessous, car sinon
  60.         // c'est la route /drop/tables qui est gardée au sein de l'URL
  61.         //
  62.        
  63.         return $this->redirectToRoute('index');
  64.        
  65.     }
  66.  
  67. }
  68.  

Le contrôleur comporte un constructeur qui prendra par défaut lorsqu'il sera créé une connexion à la de données.

On introduit lignes 4 à 7 les classes de Symfony qui sont liées à l'utilisation du contrôleur :

5.2.1. La route /

Le première route / doit posséder également un nom qui permet de l'identifier lors d'une redirection.

Elle est associée à une fonction, ici homepage qui prend deux paramètres qui seront renseignés par Symfony et retourne une valeur de type Response qui correspondra à du code HTML.

Le contrôleur se content de retourner le code du fichier templates/base.html.twig.

5.2.2. La route /drop/tables

Le seconde route /drop/tables, nommée également par drop_tables, supprime le contenu des tables de la base de données puis retourne sur la page d'accueil du site.

Cette route est introduite afin de faciliter la réinitialisation de la base de données mais devra être supprimée lorsque le site sera mis en production.






<< TP 4
TP 6 >>