Une route est une règle qui établit la correspondance entre une URL spécifique et une action définie dans un contrôleur. Les routes permettent de déterminer quelle logique exécuter lorsqu’une requête HTTP est reçue.
Organisation des fichiers de routage
Par défaut, Symfony utilise un fichier de configuration principal pour définir les routes : config/routes.yaml
. Ce fichier peut être complété par d’autres fichiers situés dans le répertoire config/routes/
. Depuis Symfony 6, les attributs PHP8 sont la méthode de configuration privilégiée, bien qu’il existe plusieurs formats possibles.
Exemple typique de configuration dans config/routes.yaml
:
controllers:
resource:
path: ../src/Controller/
namespace: App\Controller
type: attribute
Cette configuration indique que toutes les routes définies via des attributs PHP dans le répertoire src/Controller
seront automatiquement détectées.
Formats disponibles pour définir les routes
Symfony propose plusieurs méthodes pour configurer les routes. Voici les formats les plus courants :
a) Les attributs PHP
Les attributs PHP (disponibles depuis PHP 8) sont désormais la méthode standard pour définir les routes. Ils permettent de définir directement les règles au sein des contrôleurs.
Exemple :
#[Route("/")]
public function index(): Response
{
// Logic here
}
b) Les annotations
Les annotations, bien que similaires aux attributs, nécessitent l’utilisation d’un commentaire de type docblock.
Exemple :
/**
* @Route("/")
*/
public function index(): Response
{
// Logic here
}
c) Le format YAML
Le format YAML est toujours largement utilisé pour configurer les routes dans des fichiers centralisés. Cela peut être utile pour des configurations complexes ou des projets collaboratifs.
Exemple :
index:
path: /
controller: App\Controller\DefaultController::index
Informations obligatoires pour une route
Quelle que soit la méthode utilisée, une route doit inclure deux informations essentielles :
- Le
path
: Correspond à l’URI de l’application, par exemple/
,/about
, ou/products/{id}
. - L’action : Représente la méthode du contrôleur à exécuter, comme
DefaultController::index
.
Exemple avec attributs PHP :
#[Route("/products/{id}")]
public function showProduct(int $id): Response
{
// Logic for displaying a product with $id
}
Exemple en YAML :
product_show:
path: /products/{id}
controller: App\Controller\ProductController::show
Options supplémentaires pour les routes
Les routes peuvent être enrichies avec des options supplémentaires, comme les méthodes HTTP autorisées ou les contraintes sur les paramètres.
a) Limiter les méthodes HTTP
Vous pouvez définir les méthodes HTTP (GET, POST, etc.) autorisées pour une route.
- Avec attributs PHP :
#[Route("/", methods: ["GET", "POST"])]
public function index(): Response
{
// Logic here
}
- Avec annotations :
/**
* @Route("/", methods={"GET", "POST"})
*/
public function index(): Response
{
// Logic here
}
- Avec YAML :
index:
path: /
controller: App\Controller\DefaultController::index
methods: GET|POST
b) Contraintes sur les paramètres
Symfony permet d’ajouter des contraintes sur les paramètres des routes en utilisant des expressions régulières.
- Avec attributs PHP :
#[Route("/products/{id<\d+>}")]
public function showProduct(int $id): Response
{
// Only matches if {id} is numeric
}
- Avec YAML :
product_show:
path: /products/{id}
controller: App\Controller\ProductController::show
requirements:
id: \d+
Cas pratiques et ressources utiles
Exemple de routes dynamiques
Si vous souhaitez créer une route qui correspond à plusieurs chemins dynamiques :
- URL :
/category/{slug}
- Méthode contrôleur :
CategoryController::show
Avec attributs PHP :
#[Route("/category/{slug}")]
public function showCategory(string $slug): Response
{
// Logic to display category
}
Avec YAML :
category_show:
path: /category/{slug}
controller: App\Controller\CategoryController::show
Références utiles
- Documentation officielle Symfony sur le routage
- Guide des attributs PHP sur Symfony
- Introduction à YAML pour Symfony
La définition des routes dans Symfony offre une flexibilité qui s’adapte aux besoins de chaque projet. Qu’il s’agisse d’attributs PHP modernes, d’annotations ou de fichiers YAML, vous avez le choix des outils pour configurer efficacement vos applications. En maîtrisant ces différents formats et options, vous pourrez organiser vos routes de manière logique et performante.