Aller au contenu principal

Routage et vues

Comment Symfony gère les routes et les vues

Notions théoriques

Le système de routage de Symfony est ce qui mappe les URL aux contrôleurs. Chaque route est définie par un chemin (l'URL) et une action (la méthode du contrôleur à appeler).

Il y a 3 façons de définir les routes :

  1. Les routes peuvent être définies **dans le fichier config/routes.yaml **

    Exemple :

    player_index:
    path: /player
    # the controller value has the format 'controller_class::method_name'
    controller: App\Controller\GameController::index
  2. Les routes peuvent être définies directement dans le contrôleur en utilisant les annotations de PHP >= 5.3.

    Exemple :

    /**
    * @Route("/player", name="player_index")
    */
  3. Les routes peuvent être définies directement dans le contrôleur en utilisant les attributs PHP >= 8.

    Exemple :

    #[Route('/player', name: 'player_index')]

Par exemple, pour définir une route pour notre méthode d'action index dans GameController, nous pouvons ajouter l'attribut #[Route('/game', name: 'game')] juste avant la déclaration de la méthode. Cela signifie que lorsque nous accédons à l'URL '/game', Symfony appellera la méthode index de GameController.

Les vues dans Symfony sont généralement construites avec le moteur de template Twig. Pour afficher une vue, nous pouvons utiliser la méthode render de AbstractController, qui prend le chemin du template Twig et un tableau de variables à passer au template.

Exemple de mise en application

Supposons que nous voulons créer une route pour afficher les détails d'un joueur. Dans le contrôleur PlayerController, ajoutez la méthode suivante :

/**
* @Route("/player/{id}", name="player_show")
*/
public function show(int $id): Response
{
return new Response('Affichage du joueur : ' . $id);
}

Maintenant, si vous accédez à http://localhost:8000/player/1, vous verrez le message "Affichage du joueur : 1".

Pour rendre une vue, créez un fichier show.html.twig dans le dossier templates/player et ajoutez le code suivant :

<h1>Affichage du joueur : {{ id }}</h1>

Ensuite, modifiez la méthode show() pour rendre cette vue :

public function show(int $id): Response
{
return $this->render('player/show.html.twig', ['id' => $id]);
}

Test de mémorisation/compréhension


Qu'est-ce que le routage dans Symfony ?


Où sont stockés les fichiers de vue dans Symfony ?


Comment rendre une vue dans un contrôleur ?


Quel moteur de template Symfony utilise-t-il par défaut ?


Comment définissons-nous une route dans Symfony avec PHP 8 ?



TP pour réfléchir et résoudre des problèmes

Votre défi pour aujourd'hui consiste à créer une route et une vue

Créez une nouvelle route game_show dans le contrôleur GameController qui accepte un paramètre id.

Cette route doit renvoyer une vue qui affiche "Affichage du jeu : " suivi de l'ID du jeu.

Une solution