
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 :
- PHP (jamais)
- YAML (fichier de configuration route.yaml oĂč on peut mettre toutes les routes â utilisĂ© parfois car cela permet dâavoir toutes les routes au mĂȘme endroit)
- XML (trĂšs similaire au fichier YAML, mais moins bien)
- annotations (/** *@UneAnnotation */ au dessus de la mĂ©thode associĂ©e â utilisĂ©)
- attributs (avec # au dessus de la mĂ©thode associĂ©e, câest ça que fait le make:controller â utilisĂ©)
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.
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 :
render()
json()
file()pour télécharger un ficher
createNotFoundException()
Routage :
redirectToRoute()pour diriger vers un autre contrĂŽleur
generateURL()pour générer une URL
redirect()pour diriger vers une autre site web
Sécurité :
getUser()pour rĂ©cupĂ©rer lâutilisateur connectĂ©
createAccesDeniedException()
isGranted()pour vĂ©rifier si lâutilisateur a les droits
denyAccessUnlessGranted()pour interdire lâaccĂšs Ă un utilisateur qui nâa pas les droits
ModÚle et données :
createForm()
getDoctrine()
Divers :
addFlash()pour afficher un message qui nâapparaĂźt quâune fois (ex: confirmation dâajout en base de donnĂ©es)
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âŠ
symfony console cache:clear.