Contactez-nous

Etape 1 : Définir une nouvelle route

Apprenez à définir une nouvelle route dans Symfony en utilisant les attributs. C'est la première étape essentielle pour rendre votre page accessible via une URL.

Qu'est-ce qu'une route et pourquoi est-elle indispensable ?

Dans le contexte de Symfony, une route est une règle qui associe une URL spécifique (le chemin que l'utilisateur tape dans son navigateur) à une portion de code de votre application qui sera chargée de générer la réponse pour cette URL. Plus précisément, une route fait le lien entre un motif d'URL et un contrôleur (une méthode d'une classe PHP).

Imaginez un grand bureau de poste avec de nombreux guichets. L'URL est comme l'adresse sur une enveloppe, et le système de routage est l'employé qui lit cette adresse et dirige l'enveloppe (la requête) vers le bon guichet (le contrôleur) pour traitement. Sans route, Symfony ne saurait pas quel contrôleur exécuter lorsqu'un utilisateur demande une page spécifique.

Définir une route est donc la toute première étape concrète pour rendre une nouvelle fonctionnalité ou une nouvelle page de votre site accessible. C'est la porte d'entrée que vous créez pour les utilisateurs. Chaque page publique de votre application web Symfony doit avoir au moins une route qui lui est associée.

Comment définir une route avec les attributs PHP ?

Dans les versions modernes de Symfony, la manière la plus courante et la plus pratique de définir des routes est d'utiliser les attributs PHP (disponibles depuis PHP 8.0). Anciennement, cela se faisait avec des annotations DocBlock, mais les attributs offrent une syntaxe plus propre et native à PHP. Un attribut est une forme de métadonnée que vous pouvez attacher à des classes, méthodes, propriétés, etc.

Pour définir une route, vous allez utiliser l'attribut Symfony\Component\Routing\Annotation\Route (ou plus simplement #[Route] après avoir importé la classe avec une instruction use) directement au-dessus de la méthode du contrôleur qui doit gérer cette route.

Voici la structure de base :

Analysons les éléments clés de cet attribut #[Route(...)] :

  • '/chemin-de-votre-page' : C'est le chemin de l'URL. Si votre application est accessible à http://localhost:8000, alors cette page sera accessible à http://localhost:8000/chemin-de-votre-page. Choisissez des chemins clairs, descriptifs et en minuscules, avec des tirets pour séparer les mots (kebab-case).
  • name: 'nom_de_la_route' : C'est le nom de la route. Il s'agit d'un identifiant unique pour cette route dans toute votre application. Il est crucial pour générer des URLs vers cette page depuis d'autres endroits de votre code (par exemple, dans les templates Twig ou dans d'autres contrôleurs) de manière dynamique et robuste. La convention est d'utiliser des minuscules et des underscores (snake_case). Un nom de route bien choisi est explicite, par exemple app_homepage, blog_post_show, contact_form_submit.

Exemple concret : Créer une route pour une page "A Propos"

Imaginons que nous voulions créer une page "A Propos" pour notre site. L'URL souhaitée serait /a-propos. Nous allons donc créer un nouveau contrôleur (ou utiliser un contrôleur existant, comme DefaultController s'il est pertinent) et y ajouter une méthode avec la route correspondante.

Si vous n'avez pas encore de contrôleur dédié, vous pouvez en générer un rapidement avec Symfony Console :

php bin/console make:controller StaticPageController

Cela créera un fichier src/Controller/StaticPageController.php. Modifions-le pour y ajouter notre route "A Propos" :

Page A Propos

Ceci est notre page à propos.

' ); } // Vous pouvez ajouter d'autres routes et méthodes ici // Par exemple, une page de contact : // #[Route('/contact', name: 'app_contact')] // public function contact(): Response // { // return new Response('Contactez-nous !'); // } }

Quelques points importants à noter :

  • Le nom du fichier du contrôleur (StaticPageController.php) et le nom de la classe (StaticPageController) doivent correspondre.
  • La classe du contrôleur hérite de AbstractController, ce qui fournit des méthodes utiles (comme render() pour les templates, que nous verrons plus tard).
  • La méthode about() est la méthode qui sera exécutée lorsque l'URL /a-propos sera appelée.
  • Le nom de la route, app_about, est unique et descriptif. Le préfixe app_ est une convention courante pour les routes spécifiques à votre application.
  • Pour l'instant, notre méthode retourne un objet Symfony\Component\HttpFoundation\Response avec du HTML simple. C'est le minimum requis pour qu'une page s'affiche.

Une fois ce code en place, si votre serveur de développement Symfony est lancé (symfony server:start), vous devriez pouvoir accéder à l'URL http://localhost:8000/a-propos dans votre navigateur et voir le message "Page A Propos Ceci est notre page à propos.". Si ce n'est pas le cas, vérifiez les messages d'erreur dans le navigateur ou dans la console de Symfony.

Vérifier vos routes avec Symfony CLI

Symfony fournit un outil en ligne de commande très utile pour lister toutes les routes définies dans votre application et vérifier leur configuration. C'est la commande debug:router.

Ouvrez votre terminal, naviguez jusqu'au répertoire racine de votre projet Symfony, et exécutez :

php bin/console debug:router

Vous devriez voir une liste de toutes les routes, y compris celle que vous venez de créer (app_about). La sortie vous montrera le nom de la route, la méthode HTTP acceptée (par défaut ANY si non spécifié, mais il est bon de spécifier methods: ['GET'] pour les pages affichant des informations), le schéma, l'hôte, le chemin et le contrôleur associé.

-------------------- -------- -------- ------ ------------------------------------ 
  Name                 Method   Scheme   Host   Path                                
-------------------- -------- -------- ------ ------------------------------------ 
  _preview_error       ANY      ANY      ANY    /_error/{code}.{_format}            
  app_about            ANY      ANY      ANY    /a-propos                           
  ... (autres routes éventuelles)                                                  
-------------------- -------- -------- ------ ------------------------------------ 

Si vous voulez spécifier que votre route ne doit répondre qu'aux requêtes GET (ce qui est courant pour une page qui affiche simplement des informations), vous pouvez modifier votre attribut ainsi :

    #[Route('/a-propos', name: 'app_about', methods: ['GET'])]
    public function about(): Response
    {
        // ...
    }

Relancez php bin/console debug:router et vous verrez que la colonne Method pour app_about indiquera maintenant GET.

Cette commande est votre meilleure amie pour déboguer les problèmes de routage (par exemple, si une URL ne fonctionne pas comme prévu ou si vous avez un conflit de routes).

Vous avez maintenant franchi la première étape cruciale : vous avez défini une URL et l'avez connectée à un futur gestionnaire dans votre code Symfony ! La prochaine étape sera de donner corps à ce gestionnaire en implémentant la logique dans le contrôleur.