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 :
-
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 -
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")
*/ -
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
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
Vous devez être connecté pour voir le contenu.