Route sans argument

Nous avons vu dans la section précente comment créer une route simple, c'est à dire sans argument.

Route avec paramètre

Configuration de la route

// fichier src/Controller/PlayerController.php
/**
 * @Route("/player/{battletag}", name="player_show")
 */
public function show()
{

Le paramètre battletag fait partie du chemin. Il capturera toutes les URL en /player/* . Par exemple :

  • /player/4
  • /player/toto

Par défaut, les paramètres sont obligatoires.

Récupération du paramètre dans le contrôleur

<?php
namespace App\Controller;

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

class PlayerController extends Controller
{
  /**
  * @Route("/player/{battletag}", name="player_show")
  */
  public function show($battletag)
  {
      return new Response("Valeur saisie : ".$battletag.".");
  }
}
	

Utilisation extensible

On peut avoir plusieurs arguments dans l'url

// fichier src/Controller/PlayerController.php
/**
 * @Route("/diablo/{type}/{nomDocument}.{extension}", name="player_show")
 */
public function file($type, $nomDocument, $extension)
{

L'association des variables entre route et contrôleur se fait par nom (et non par ordre des arguments).

Obtenir des informations

Vous pouvez obtenir des informations sur le routage dans le profiler (la barre en bas en mode développement).

Il est aussi possible de lister l'ensemble des routes grâce à la console :

$ php bin/console debug:router

Exercice

Créer une branche routeur à partir de la branche master

Dans cet exercice du cours sur le routeur, il n'y aura pas de vue, on utilisera des Response.

Ajouter la route test avec son paramètre id. La page appelée devra afficher le paramètre. Exemples :