Post

Symfony – Les contrôleurs

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.

This post is licensed under CC BY 4.0 by the author.