📘

Routage et contrĂŽleurs

Routes


Le systĂšme de routage fait qu’une route est une correspondance entre une URL (dans le navigateur) et une mĂ©thode PHP (dans le contrĂŽleur).

Il est possible de passer des paramĂštres de l’URL Ă  la mĂ©thode, de maniĂšre plus jolie que ?id=1.

Configuration

5 façons possibles :

BP : on utilise maintenant au maximum les attributs.

(Annotations ou) attributs

Ce sont en fait des commentaires interprétés, placés au-dessus du code PHP associé.

Ils doivent impérativement avoir cette forme : #[Route(
.)].

Dans le contrĂŽleur, on importe la classe de route de Symfony et on lui donne un alias, puis on crĂ©e l’annotation au-dessus de chaque mĂ©thode.

...
use Symfony\Component\Routing\Annotation\Route;
...
#[Route('/', name: 'home_index')]
    public function index(): Response
{
	...
}

ParamĂštres

Dans les paramĂštres passĂ©s Ă  l’attribut, on donne obligatoire l’URL souhaitĂ©e de la route et un nom Ă  cette route ; Ă©ventuellement, on peut ajouter des conditions (requirements) et des mĂ©thodes.

⚠
On peut avoir la mĂȘme route pour diffĂ©rentes mĂ©thodes (ex: get et post) mais leur nom doit ĂȘtre unique (et en snake_case).

Dans l’URL de la route, on passe entre accolades le paramĂštre qu’on souhaite prendre en compte dans la mĂ©thode.

On peut ajouter des conditions sur ce paramÚtre avec requirements ou un paramÚtre par défaut.

#[Route("/utilisateurs/profils/{user}")]
...

#[Route("/utilisateurs/profils/{id}", requirements={"id"="\d+"}))]
...

#[Route("/utilisateurs/profils/{page}")]
public function listusers($page = 1)
{
	...
}

Il existe d’autres conditions au match de la requĂȘte :

- method

- host pour rediriger selon l’hîte

- _locale pour la langue

- UTF-8 pour vérifier que le navigateur est bien codé en UTF-8

Console

Afficher la liste des routes : symfony console debug:router

Afficher les dĂ©tails d’une route : symfony console debug:router name_route

Tester le match entre une URL et une route : symfony console router:match /url-a-tester

ContrĂŽleurs


Un contrÎleur est une simple classe PHP, qui hérite du contrÎleur de Symfony AbstractController. Il retourne un objet Response.

On peut en crĂ©er autant qu’on veut mais chaque mĂ©thode du contrĂŽleur n’est liĂ© qu’à une seule page, elle retourne un et un seul Twig.

BP : On essaie de regrouper les mĂ©thodes et Twigs qui se ressemble et d’avoir un contrĂŽleur par fonctionnalitĂ©.

Pour créer un contrÎleur : symfony console make:controller > nomController

Méthodes

Affichage et réponses :

Routage :

Sécurité :

ModÚle et données :

Divers :

Préfixes

Pas obligatoire, ils sont utiles quand on rĂ©pĂšte plusieurs fois le mĂȘme dĂ©but d’URL.

On l’attribut de la route commune au dessus du contrĂŽleur et ainsi toutes les routes commencent par le prĂ©fixe.

Les noms de route sont concaténés. On touche pas au chemin du twig.

BP : on laisse le nom de la route dans la fonction avec un underscore, ce qui indique au lecteur qu’on utilise un prĂ©fixe.
#[Route('/series', name: 'serie')]
class SerieController
	#[Route('/', name: '_series')]
	public function series(): Response
	{
		return $this->render('serie/series.html.twig', []);
	}
	
	#[Route('/{id}', name: '_serie'), requirements: ['id'=>'\d+'])]
	public function serie(int $id): Response
	{
		return $this->render('serie/serie.html.twig', []);
	}

Débogage


Des paquets permettent d’ajouter une barre de dĂ©bogage dans le navigateur, en environnement de dĂ©veloppement.

Pour installer la barre de débogage : composer require symfony/profiler-pack --dev

Pour installer le paquet pour les dump() sur les variables : composer require symfony/var-dumper --dev

Pour installer le paquet qui affiche les dump() dans la barre : composer require symfony/debug-bundle --dev

Les mĂ©thodes disponibles sont dump() pour rĂ©aliser un “joli” var_dump() dans la barre de dĂ©bogage et dd() qui rĂ©alise un dump() suivi d’un die() (arrĂȘt du traitement).

La barre montre de nombreuses informations : statut http, @nom de la route, temps de traitement, mĂ©moire utilisĂ©e, messages d’erreurs, warnings, temps d’affichage du twig, nombre de requĂȘtes SQL


â„č
En dĂ©veloppement, le cache est rĂ©initialisĂ© Ă  chaque chargement de page tandis qu’en production, le cache est conservĂ© (+ rapide) et il faut le vider Ă  la main avec symfony console cache:clear.