Les routes en annotation avec Symfony 5

Dans ce tuto, voici comment crée des routes en annotation avec Symfony 5

Une route est une carte d’un chemin d’URL vers un contrôleur. Par exemple, l’URL /ma-page est mappée à la méthode ma-page() de MonController.

L’annotation @Route est utilisée pour créer des itinéraires. Les autres options sont les fichiers de configuration XML et YAML et le code PHP. L’annotation est utilisée à l’intérieur de la chaîne de documentation.

Dans l’exemple suivant, nous utilisons différentes options de @Route.

Avec composer, nous créons un nouveau projet squelette Symfony. Nous naviguons jusqu’au répertoire du projet.

$ composer require maker
$ composer require annotations

Création du controlleur MonControlleur

php bin/console make:controller MonController

Le Controlleur MonController est créé.

<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class MonController extends AbstractController
{
    /**
     * @Route("/home")
     */
    public function accueil()
    {
        return new Response("accueil",  Response::HTTP_OK,
            ['content-type' => 'text/plain']);
    }
  

    /**
     * @Route("/news/{id}", requirements={"page"="\d+"})
     */
    public function news($id)
    {
        $msg = 'News ' . $id;

        return new Response($msg,  Response::HTTP_OK,
            ['content-type' => 'text/plain']);
    }    
}

MonController a deux routes créées avec @Route.

/**
* @Route("/accueil")
*/
public function accueil()
{
    return new Response("home",  Response::HTTP_OK,
        ['content-type' => 'text/plain']);
}

Avec l’option methodes, nous pouvons restreindre les requêtes aux types de méthodes spécifiés. Dans notre cas, la méthode about() n’est appelée que pour les requêtes GET et POST

/**
* @Route("/news/{id}", requirements={"page"="\d+"})
*/
public function news($id)
{
    $msg = 'News ' . $id;

    return new Response($msg,  Response::HTTP_OK,
        ['content-type' => 'text/plain']);
}

Avec l’option requirements, nous spécifions les caractères autorisés pour le chemin d’URL. Le {id} est un espace réservé pour les valeurs entières.

Il est également possible de placer l’annotation sur la classe du contrôleur. Cela fonctionne comme un préfixe pour tous les chemins de route.

Nous pouvons lister les routes créées avec la commande php bin/console debug:router.