Symfony – Les contrôleurs
Cours 3 — Les contrôleurs
Présentation
Un contrôleur est une méthode PHP appelée par Symfony lorsqu’une route correspond à l’URL demandée.
La route répond à la question :
1
Quelle URL est demandée ?
Le contrôleur répond à la question :
1
Que faut-il faire quand cette URL est demandée ?
Schéma général
1
2
3
4
5
6
7
8
9
Navigateur
↓
URL
↓
Route
↓
Contrôleur
↓
Réponse
1. Contrôleur très simple
1
2
3
4
5
#[Route('/bonjour', name: 'app_bonjour')]
public function bonjour(): Response
{
return new Response('Bonjour');
}
URL :
1
/bonjour
Résultat :
1
Bonjour
Comment lire ce code ?
1
public function bonjour(): Response
Signifie :
1
2
La méthode s'appelle bonjour.
Elle renvoie obligatoirement une réponse HTTP.
La réponse est ici :
1
return new Response('Bonjour');
Symfony renvoie donc le texte Bonjour au navigateur.
2. Contrôleur avec paramètre
1
2
3
4
5
#[Route('/patient/{id}', name: 'patient_show')]
public function show(int $id): Response
{
return new Response("Patient : $id");
}
URL :
1
/patient/12
Résultat :
1
Patient : 12
3. Contrôleur qui affiche une vue Twig
Dans un vrai projet Symfony, le contrôleur ne renvoie pas toujours du texte brut.
Il renvoie souvent une page HTML grâce à Twig.
1
2
3
4
5
#[Route('/accueil', name: 'app_accueil')]
public function accueil(): Response
{
return $this->render('accueil/index.html.twig');
}
Résultat :
1
Symfony affiche le fichier Twig accueil/index.html.twig
4. Contrôleur qui transmet des données à Twig
1
2
3
4
5
6
7
#[Route('/patient/{id}', name: 'patient_show')]
public function show(int $id): Response
{
return $this->render('patient/show.html.twig', [
'id' => $id,
]);
}
Dans Twig, on pourra écrire :
1
URL :
1
/patient/12
Résultat affiché dans la page :
1
12
Comment lire ce tableau ?
1
2
3
[
'id' => $id,
]
Signifie :
1
2
Je donne à Twig une variable appelée id.
Sa valeur est celle de la variable PHP $id.
5. Contrôleur avec Repository
Dans un projet comme SoigneMoi, le contrôleur doit souvent récupérer des données dans la base.
Exemple :
1
2
3
4
5
6
7
8
9
#[Route('/patient/{id}', name: 'patient_show')]
public function show(int $id, PatientRepository $patientRepository): Response
{
$patient = $patientRepository->find($id);
return $this->render('patient/show.html.twig', [
'patient' => $patient,
]);
}
Comment lire ce code ?
1
PatientRepository $patientRepository
Signifie :
1
Symfony fournit automatiquement un objet PatientRepository au contrôleur.
Puis :
1
$patient = $patientRepository->find($id);
Signifie :
1
Je cherche dans la base de données le patient dont l'identifiant vaut $id.
Enfin :
1
'patient' => $patient
Signifie :
1
Je transmets l'objet Patient à Twig.
À retenir
Un contrôleur :
- est appelé par une route ;
- contient le code à exécuter ;
- prépare les données ;
- renvoie une réponse ;
- sert souvent de lien entre Doctrine et Twig.
Schéma mental :
1
2
3
4
5
6
7
8
9
Route
↓
Contrôleur
↓
Données
↓
Twig
↓
Réponse HTML
Conclusion
Le contrôleur est le cœur du passage entre l’URL et la réponse.
Quand tu lis un projet Symfony comme SoigneMoi, le contrôleur permet de comprendre :
- quelle page est appelée ;
- quelles données sont récupérées ;
- quel template Twig est utilisé ;
- quelles variables sont envoyées à la vue.
C’est donc l’un des premiers fichiers à lire pour comprendre le fonctionnement réel d’une application Symfony.