Symfony : – Définition des routes

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/Controllerseront 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 :

  1. Le path : Correspond à l’URI de l’application, par exemple /, /about, ou /products/{id}.
  2. 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

  1. Documentation officielle Symfony sur le routage
  2. Guide des attributs PHP sur Symfony
  3. 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.

Sites Ressources e-Plus Pour Laravel 11

1. Packagist Description : Le principal dépôt de packages PHP, avec une catégorie spécifique pour Laravel. Lien : https://packagist.org Ressources :...