Créer un premier contrôleur simple
Dans Symfony, le contrôleur est l’un des éléments centraux du modèle MVC (Modèle–Vue–Contrôleur). C’est lui qui reçoit la requête, traite la logique et renvoie une réponse (souvent une page web ou une donnée JSON).
Dans la prochaine leçon, nous allons utiliser un routeur qui relie l'URL à une action mais avant voyons comment créer un contrôleur Symfony de base. En effet, le routeur sera configurer à travers un attribut au dessus d'une méthode du contrôleur.
En Symfony, un attribut est une annotation PHP moderne utilisée pour configurer ou marquer des éléments de code — comme les contrôleurs, méthodes, propriétés, etc. — d’une manière lisible et intégrée au langage PHP lui-même.
Qu’est-ce qu’un contrôleur dans Symfony ?
Un contrôleur est une classe PHP placée dans le dossier :
src/
|-- Controller/
Créer un contrôleur rapidement
La manière la plus rapide de créer un contrôleur est d’utiliser la Symfony CLI et le MakerBundle.
Ouvrez votre terminal (ou votre console ou invite de commande) et tapez la commande suivante :
php bin/console make:controller HelloController
À la question Do you want to generate PHPUnit tests? [Experimental] (yes/no) [no]: répondez no.
Symfony va générer automatiquement le code :
- Il va créer le fichier
src/Controller/HelloController.php - Il va créer un fichier
templates/hello/index.html.twig
Voici la structure :
src/
|-- Controller/
|-- HelloController.php
|-- templates/
|-- hello/
|-- index.html.twig
Comme vous pouvez le constater, nous avons choisi le nom de contrôleur HelloController. Bien entendu, vous pouvez utiliser n’importe quel nom.
Pour nommer votre contrôleur, commencez par une majuscule et terminez par `Controller`. Si vous n’utilisez pas `Controller`, il sera normalement ajouté automatiquement.
Structure du contrôleur généré
Ouvrez le fichier HelloController.php :
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
final class HelloController extends AbstractController
{
#[Route('/hello', name: 'app_hello')]
public function index(): Response
{
return $this->render('hello/index.html.twig', [
'controller_name' => 'HelloController',
]);
}
}
Voyons ensemble la signification des différentes lignes.
Si vous ne comprenez pas, les mots-clés use et namespace, vous pouvez revoir la leçon sur les namespaces !
class HelloController
Le nom de notre contrôleur qui est une classe PHP est classHelloController. C'est ce que nous avions paramétré ensemble.
extends AbstractController
Le code extends AbstractController permet à votre contrôleur d’hériter de toutes les méthodes utiles fournies par Symfony.
Ces méthodes ne sont pas visibles dans votre fichier, mais vous pouvez les utiliser directement.
Le mot-clé extends sert à hériter des fonctionnalités d’une autre classe dans la vôtre.
#[Route('/hello', name: 'app_hello')]
#[Route('/hello', name: 'app_hello')] est un attribut au dessus de la méthode index qui correspond à la route.
return $this->render()
Et enfin, return $this->render()affiche un fichier Twig qui correspond à la Vue dans l'architecture MVC.
Voir le résultat
Dans votre navigateur tapez l'adresse suivante :
http://localhost:8000/hello
Normalement, un page devrait apparaître :
D'où provient les informations de notre pages ?
Il est essentiel de bien comprendre ce qui s’est passé avant de continuer.
Pour cela, nous allons ouvrir le fichier qui se trouve dans templates/hello/index.html.twig.
{% extends 'base.html.twig' %}
{% block title %}Hello HelloController!{% endblock %}
{% block body %}
<style>
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
</style>
<div class="example-wrapper">
<h1>Hello {{ controller_name }}! ✅</h1>
This friendly message is coming from:
<ul>
<li>Your controller at <code>/Users/henrique/Documents/apps/lab/mon_projet/src/Controller/HelloController.php</code></li>
<li>Your template at <code>/Users/henrique/Documents/apps/lab/mon_projet/templates/hello/index.html.twig</code></li>
</ul>
</div>
{% endblock %}
Alors, il y a beaucoup de chose que vous n'aller pas comprendre si vous n'êtes pas habitué à la syntaxe de Twig. Mais ce n'est pas grave concentrez vous sur ce qui est clair.
Nous comprenons par exemple que ce bout de code correspondant à ce que est affiché dans le navigateur :
<h1>Hello {{ controller_name }}! ✅</h1>
his friendly message is coming from:
<ul>
<li>Your controller at <code>/Users/henrique/Documents/apps/lab/mon_projet/src/Controller/HelloController.php</code></li>
<li>Your template at <code>/Users/henrique/Documents/apps/lab/mon_projet/templates/hello/index.html.twig</code></li>
</ul>
Comme nous l'avons dit précédemment le contrôleur va relier la requête à la Vue (Twig).
Concrètement, si on devait remplacer les éléments du schéma avec du code, cela pourrait ressembler à ça :
Vous savez désormais comment créer et comprendre un contrôleur. 👍
Nous pouvons maintenant expliquer le principe du routeur dans Symfony.
