Notre premier contrôleur
Découvrons la structure de Symfony et créons notre premier contrôleur

Notions théoriques
Symfony et le pattern MVC
Symfony est un framework PHP qui s'appuie sur le Modèle-Vue-Contrôleur (MVC), un paradigme architectural conçu pour séparer clairement la logique métier, la présentation et le traitement des requêtes.
Correspondance avec les composants MVC
| Composant MVC | Rôle dans Symfony | Éléments typiques |
|---|---|---|
| Modèle | Gère les données, les règles métier et l'accès à la base | Entités Doctrine, Repositories, Services/Handlers |
| Vue | Présente les données à l'utilisateur | Templates Twig (.html.twig), composants UI |
| Contrôleur | Reçoit la requête, orchestre le modèle et prépare la réponse | Classes étendant AbstractController, méthodes d'action |
Cycle de vie d'une requête dans Symfony
- Le Routeur matche l'URL et délègue l'exécution à un Contrôleur.
- Le Contrôleur sollicite le Modèle (services, repositories) pour lire ou modifier des données.
- Il passe ces données à une Vue (Twig) qui génère le rendu final.
- Le Contrôleur retourne un objet
Symfony\Component\HttpFoundation\Response.
Précision architecturale
Symfony respecte les principes du MVC, mais l'adapte à une approche moderne centrée sur le cycle Requête → Contrôleur → Service/Entité → Vue → Réponse. Contrairement à certains frameworks plus rigides, Symfony ne force pas une classe Model unique : la logique métier est déléguée à des services et des entités, ce qui favorise la testabilité, la réutilisabilité et une maintenance plus simple.
Symfony n'est pas seulement "compatible MVC", il en fait son fondement structurel, tout en l'alignant sur les standards actuels du développement web PHP.
Structure de dossier dans Symfony
Symfony suit une structure de dossier bien définie qui facilite la gestion et l'organisation du code.
Les principaux dossiers que vous utiliserez sont :
src: Contient le code source de votre application. C'est ici que vous créez vos contrôleurs, entités, formulaires, etc.templates: Contient les fichiers de vues de votre application. Symfony utilise le moteur de template Twig.public: C'est le répertoire racine de votre application Web. Il contient le fichierindex.phpqui est le point d'entrée de toutes les requêtes.
Un contrôleur dans Symfony est une classe PHP qui contient des méthodes d'action public. Ces méthodes d'action sont appelées lorsque certaines routes (URL) sont demandées par le client. Dans un modèle MVC, le contrôleur agit comme un intermédiaire entre le modèle (qui gère les données) et la vue (qui présente les données à l'utilisateur).
Pour créer un contrôleur dans Symfony, vous pouvez créer une nouvelle classe dans le répertoire src/Controller. Cette classe doit étendre la classe AbstractController de Symfony et doit contenir au moins une méthode d'action public. Par exemple :
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class GameController extends AbstractController
{
public function index(): Response
{
return new Response('Hello, world!');
}
}
Pour créer un contrôleur, vous pouvez aussi utiliser la commande make:controller de Symfony.
Exemple de mise en application
Maintenant, créons notre premier contrôleur. Dans votre terminal, exécutez la commande suivante :
php bin/console make:controller GameController
Cela créera un nouveau fichier GameController.php dans le dossier src/Controller. Ouvrez ce fichier, vous verrez une méthode index(). Cette méthode est une action qui renvoie une réponse HTTP. Par défaut, elle renvoie une vue Twig. Vous pouvez la modifier pour renvoyer un texte simple, comme ceci :
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class GameController extends AbstractController
{
public function index(): Response
{
return new Response('Welcome to our game!');
}
}
Maintenant, si vous accédez à http://localhost:8000/game, vous verrez le texte "Welcome to our game".
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Votre défi pour aujourd'hui consiste à créer votre premier contrôleur
Créez un contrôleur PlayerController et une action index qui renvoie "Hello, Player!".
Ensuite, accédez à http://localhost:8000/player pour voir le résultat.
Il est conseillé de toujours nommer les routes avec l'attribut name dans #[Route(...)].
Les noms de routes permettent de générer des URLs dans les vues Twig avec {{ path('player_index') }}
et dans les contrôleurs avec $this->redirectToRoute('player_index').
Cela évite de dupliquer les URLs en dur dans le code et facilite les refactorisations.
Une solution
Vous devez être connecté pour voir le contenu.