Aller au contenu principal

Notre premier contrôleur

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

MVC

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 MVCRôle dans SymfonyÉléments typiques
ModèleGère les données, les règles métier et l'accès à la baseEntités Doctrine, Repositories, Services/Handlers
VuePrésente les données à l'utilisateurTemplates Twig (.html.twig), composants UI
ContrôleurReçoit la requête, orchestre le modèle et prépare la réponseClasses étendant AbstractController, méthodes d'action

Cycle de vie d'une requête dans Symfony

  1. Le Routeur matche l'URL et délègue l'exécution à un Contrôleur.
  2. Le Contrôleur sollicite le Modèle (services, repositories) pour lire ou modifier des données.
  3. Il passe ces données à une Vue (Twig) qui génère le rendu final.
  4. 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.

remarque

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 fichier index.php qui 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


Qu'est-ce qu'un contrôleur dans Symfony ?


Quel dossier contient le code source de l'application ?


Comment créer un contrôleur dans Symfony ?


Quelle est la fonction d'une action dans un contrôleur ?


Quel dossier contient les fichiers de vues de l'application ?


Comment crée-t-on un contrôleur dans Symfony ?


Qu'est-ce qu'une méthode d'action dans Symfony ?


Quelle classe un contrôleur Symfony doit-il étendre ?


Comment renvoie-t-on une réponse HTTP dans Symfony ?



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.


Bonne pratique - Nommer ses routes

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