Introduction à Symfony
Cours niveau L2 – IPD
Mr LY
Université IPD
May 17, 2025
Mr LY (Université IPD) Symfony May 17, 2025 1 / 38
Plan du cours (20h)
1 Introduction à Symfony
2 Structure d’un projet Symfony
3 Les entités et Doctrine ORM
4 Les contrôleurs et le routage
5 Templates avec Twig
6 Formulaires Symfony
7 Sécurité et utilisateurs
8 TPs et mini-projet
Mr LY (Université IPD) Symfony May 17, 2025 2 / 38
Introduction à Symfony
Qu’est-ce que Symfony ?
Framework PHP open source, maintenu
par SensioLabs.
Utilise l’architecture MVC :
Modèle-Vue-Contrôleur.
Moderne, robuste, modulaire et utilisé
dans de nombreux projets
professionnels.
Mr LY (Université IPD) Symfony May 17, 2025 3 / 38
Introduction à Symfony
Symfony et l’architecture MVC
Modèle (Model) : gestion des données
(base de données, entités).
Vue (View) : présentation de
l’interface utilisateur.
Contrôleur (Controller) : gestion des
requêtes et logique métier.
Mr LY (Université IPD) Symfony May 17, 2025 4 / 38
Introduction à Symfony
Prérequis techniques
PHP version 8+
Composer (gestionnaire de dépendances PHP)
Symfony CLI (outil en ligne de commande)
Serveur web local (Apache, Nginx, ou serveur Symfony)
Mr LY (Université IPD) Symfony May 17, 2025 5 / 38
Introduction à Symfony
Installation de Composer
Composer est le gestionnaire de dépendances pour PHP.
Pour l’installer (Linux / macOS) :
Commande
php -r "copy(’[Link] ’composer-se
php [Link]
php -r "unlink(’[Link]’);"
mv [Link] /usr/local/bin/composer
Sur Windows : utiliser l’installeur depuis [Link]
Mr LY (Université IPD) Symfony May 17, 2025 6 / 38
Introduction à Symfony
Installation de Symfony CLI
Symfony CLI est l’outil recommandé pour gérer vos projets Symfony.
Linux / macOS
curl -sS [Link] | bash
mv ~/.symfony*/bin/symfony /usr/local/bin/symfony
Windows
Télécharger depuis : [Link]
Suivre les instructions de l’assistant d’installation.
Mr LY (Université IPD) Symfony May 17, 2025 7 / 38
Introduction à Symfony
Création d’un projet Symfony
Méthode recommandée — Symfony CLI
symfony new mon_projet --webapp
Crée un projet Symfony complet avec les composants les plus utilisés
(Twig, Doctrine, etc.).
Nécessite que l’outil Symfony CLI soit installé.
Alternative — via Composer
composer create-project symfony/skeleton mon_projet
Crée un squelette minimal pour un projet personnalisé (souvent utilisé
pour les APIs).
Les composants doivent être ajoutés manuellement.
Mr LY (Université IPD) Symfony May 17, 2025 8 / 38
Introduction à Symfony
Lancement du serveur Symfony
Commandes de démarrage
cd mon_projet
symfony serve # Alias de symfony server:start
symfony serve -d --port=9000 # En arrière-plan sur le port 9000
symfony serve lance le serveur local.
-d : mode daemon (en arrière-plan).
--port=9000 : permet de spécifier un port.
Accès : [Link] ou [Link]
Utilise PHP intégré ou PHP-FPM si installé.
Mr LY (Université IPD) Symfony May 17, 2025 9 / 38
Introduction à Symfony
Autres commandes utiles de Symfony CLI
Commandes fréquemment utilisées
symfony server:stop # Arr^ete le serveur local
symfony server:status # Vérifie l’état du serveur
symfony check:requirements # Vérifie les prérequis Symfony
symfony console # Alias de php bin/console
server:stop : termine le processus lancé en arrière-plan.
server:status : affiche le port et le PID du serveur actif.
check:requirements : utile après installation pour vérifier
l’environnement.
console : point d’entrée pour toutes les commandes Symfony (ex :
make, debug).
Mr LY (Université IPD) Symfony May 17, 2025 10 / 38
Structure d’un projet Symfony
Les répertoires principaux
src/ : code source PHP (contrôleurs, entités, services, etc.)
templates/ : vues (fichiers Twig)
config/ : configuration de l’application (routes, services, etc.)
public/ : répertoire web root ([Link], assets accessibles
publiquement)
Mr LY (Université IPD) Symfony May 17, 2025 11 / 38
Structure d’un projet Symfony
Le répertoire src/
Contient le code PHP principal du projet.
On y trouve notamment :
Controller/ : les contrôleurs MVC.
Entity/ : les entités Doctrine (si ORM utilisé).
Service/, Repository/, etc. : les services métiers.
Namespace par défaut : App\.
Mr LY (Université IPD) Symfony May 17, 2025 12 / 38
Structure d’un projet Symfony
Créer un contrôleur Symfony
Symfony fournit une commande pour générer rapidement un
contrôleur :
Commande à utiliser
php bin/console make:controller NomDuControleur
Exemple :
php bin/console make:controller ProduitController
Cette commande génère automatiquement :
Un fichier src/Controller/[Link]
Un fichier de vue Twig associé dans
templates/produit/[Link]
Mr LY (Université IPD) Symfony May 17, 2025 13 / 38
Structure d’un projet Symfony
Le répertoire templates/
Contient les fichiers Twig (moteur de template de Symfony).
Organisation libre, souvent :
[Link] : layout principal.
controller name/ : vues associées aux contrôleurs.
Utilisé via render(’...’) dans les contrôleurs.
Mr LY (Université IPD) Symfony May 17, 2025 14 / 38
Structure d’un projet Symfony
Le répertoire config/
Contient toute la configuration de l’application.
Principaux fichiers :
[Link] : pour le routage.
[Link] : pour l’injection de dépendances.
packages/ : configurations spécifiques aux composants.
Format YAML, PHP ou XML supporté.
Mr LY (Université IPD) Symfony May 17, 2025 15 / 38
Structure d’un projet Symfony
Introduction à Twig
Twig est le moteur de template utilisé par Symfony.
Il permet de générer dynamiquement du HTML à partir de variables
PHP.
Séparation claire entre logique métier (PHP) et présentation (HTML).
Syntaxe simple, rapide et sécurisée.
Extension des templates, inclusion de blocs, filtres, etc.
Mr LY (Université IPD) Symfony May 17, 2025 16 / 38
Structure d’un projet Symfony
Syntaxe de base Twig
Affichage d’une variable : {{ variable }}
Conditions :
{% if condition %} ... {% endif %}
Boucles :
{% for item in items %} ... {% endfor %}
Commentaires : {# commentaire #}
Mr LY (Université IPD) Symfony May 17, 2025 17 / 38
Structure d’un projet Symfony
Exemple d’utilisation avec un contrôleur
Contrôleur Symfony :
return $this->render(’produit/[Link]’, [
’produit’ => ’Symfony 6’ ]);
Fichier Twig :
{{ produit }} affiche ”Symfony 6”
Mr LY (Université IPD) Symfony May 17, 2025 18 / 38
Structure d’un projet Symfony
Héritage de templates avec Twig
On définit un layout principal : [Link]
On utilise {% extends ’[Link]’ %} pour hériter
On définit des blocs personnalisables :
{% block title %}Mon titre{% endblock %}
{% block body %}Contenu{% endblock %}
Permet de réutiliser une structure HTML commune
Mr LY (Université IPD) Symfony May 17, 2025 19 / 38
Structure d’un projet Symfony
Filtres, fonctions et bonnes pratiques
Filtres : modifier la sortie d’une variable
{{ nameupper —
→ majuscules{{ datedate(′ d/m/Y ′ )| → f ormatdedate
Fonctions utiles :
path(’route_name’) pour générer une URL
asset(’chemin/[Link]’) pour inclure des ressources
Bonnes pratiques :
Ne pas mettre de logique métier dans Twig
Utiliser l’héritage de templates
Utiliser les filtres pour sécuriser les données (ex: e— pour escape)
Mr LY (Université IPD) Symfony May 17, 2025 20 / 38
Les entités et Doctrine ORM
Introduction à Doctrine ORM
Doctrine est l’ORM (Object-Relational Mapping) par défaut de
Symfony
Permet de manipuler des objets PHP au lieu d’écrire du SQL
Principales fonctionnalités :
Mapping des classes PHP vers des tables de base de données
Gestion des relations entre entités (One-to-Many, Many-to-One, etc.)
Requêtes via le QueryBuilder ou DQL (Doctrine Query Language)
Migrations pour gérer l’évolution du schéma de la base de données
Mr LY (Université IPD) Symfony May 17, 2025 21 / 38
Les entités et Doctrine ORM
Création d’une entité avec la CLI
Via la commande make:entity
php bin/console make:entity
Assistant interactif pour créer/modifier des entités
Questions posées par l’assistant :
Nom de l’entité (ex: Product)
Propriétés (nom, type, contraintes)
Relations avec d’autres entités
Génère les classes PHP avec getters/setters
Crée également un Repository associé
Mr LY (Université IPD) Symfony May 17, 2025 22 / 38
Les entités et Doctrine ORM
Structure d’une entité Doctrine
Entité Product
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ProductRepository::class)]
class Product
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $name = null;
Mr LY (Université IPD) Symfony May 17, 2025 23 / 38
Les entités et Doctrine ORM
Configuration de la base de données
Configuration dans le fichier .env :
Exemples de configuration
# Config MySQL
DATABASE_URL="mysql://db_user:db_password@[Link]:3306/db_na
# Config SQLite
DATABASE_URL="sqlite:///%kernel.project_dir%/var/[Link]"
# Config PostgreSQL
DATABASE_URL="postgresql://db_user:db_password@[Link]:5432/
Création de la base de données :
php bin/console doctrine:database:create
Création du schéma :
Mr LY (Université IPD) Symfony May 17, 2025 24 / 38
Les entités et Doctrine ORM
Relation One-to-Many (1..n)
Un objet Category peut être [draw, rectangle, minimum
associé à plusieurs produits width=2cm, minimum height=1cm]
Chaque Product appartient à (category) Category; [draw,
une seule catégorie rectangle, minimum width=2cm,
minimum height=1cm, below=2cm
Exemple : une catégorie
of category] (product) Product; [-¿]
”Électronique” contient
(category) – (product) node[midway,
plusieurs produits
right] 1..*;
Mr LY (Université IPD) Symfony May 17, 2025 25 / 38
Les entités et Doctrine ORM
Création d’une relation avec make:entity
Ajouter une relation
php bin/console make:entity
> Class name: Product
> New property name: category
> Field type: relation
> What type of relation? ManyToOne
> Related entity: Category
> Is this a nullable relation? no
La commande make:entity permet d’ajouter des relations :
OneToOne (1..1)
ManyToOne (n..1)
OneToMany (1..n)
ManyToMany (n..n)
L’assistant configure les deux côtés de la relation
Mr LY (Université IPD) Symfony May 17, 2025 26 / 38
Les entités et Doctrine ORM
Implémentation One-to-Many (côté ”One”)
Entité Category - Côté ”One”
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: CategoryRepository::class)]
class Category
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
Mr LY (Université IPD) Symfony May 17, 2025 27 / 38
Les entités et Doctrine ORM
Méthodes de gestion de collection
Méthodes générées pour Category
// Récupérer tous les produits
public function getProducts(): Collection
{
return $this->products;
}
// Ajouter un produit
public function addProduct(Product $product): self
{
if (!$this->products->contains($product)) {
$this->products[] = $product;
$product->setCategory($this);
}
return $this;
}
Mr LY (Université IPD) Symfony May 17, 2025 28 / 38
Les entités et Doctrine ORM
Implémentation Many-to-One (côté ”Many”)
Entité Product - Côté ”Many”
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ProductRepository::class)]
class Product
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $name = null;
Mr LY (Université IPD) Symfony May 17, 2025 29 / 38
Les entités et Doctrine ORM
Utilisation des relations (1/2)
Créer et lier des entités
// Dans un contr^ oleur
public function createProduct(EntityManagerInterface $entityMa
{
// Créer une catégorie
$category = new Category();
$category->setName(’Électronique’);
// Créer un produit
$product = new Product();
$product->setName(’Smartphone’);
$product->setPrice(499.99);
// Associer le produit à la catégorie
$product->setCategory($category);
// OU via la catégorie
Mr LY (Université IPD) Symfony May 17, 2025 30 / 38
Les entités et Doctrine ORM
Utilisation des relations (2/2)
Naviguer dans les relations
// Récupérer une catégorie (avec ses produits)
$category = $categoryRepository->find($id);
// Accéder aux produits d’une catégorie
$products = $category->getProducts();
foreach ($products as $product) {
echo $product->getName() . ’: ’ . $product->getPrice() . ’
}
// Accéder à la catégorie d’un produit
$product = $productRepository->find($id);
$categoryName = $product->getCategory()->getName();
// Requ^
ete avec jointure via le Repository
public function findByCategory($categoryId)
Mr LY (Université IPD) Symfony May 17, 2025 31 / 38
Les entités et Doctrine ORM
Migrations Doctrine (1/2)
Les migrations permettent de versionner votre schéma de base de
données
Cycle de vie des migrations :
1 Modifier vos entités (ajout/suppression de propriétés)
2 Générer une migration qui compare l’état actuel de la BDD avec les
entités
3 Exécuter la migration pour mettre à jour la BDD
Commandes principales :
# Générer une migration
php bin/console make:migration
# Exécuter les migrations en attente
php bin/console doctrine:migrations:migrate
# Voir l’état des migrations
php bin/console doctrine:migrations:status
Mr LY (Université IPD) Symfony May 17, 2025 32 / 38
Les entités et Doctrine ORM
Migrations Doctrine (2/2)
Exemple de fichier de migration
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20250517150000 extends AbstractMigration
{
public function up(Schema $schema): void
{
// Ce qui est exécuté lors de la mise à jour
$this->addSql(’CREATE TABLE category (id INT AUTO_INCR
name VARCHAR(255) NOT NULL, PRIMARY KEY(
$this->addSql(’CREATE TABLE product (id INT AUTO_INCRE
category_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
Mr LY (Université IPD) Symfony May 17, 2025 33 / 38
Les contrôleurs et le routage
Création d’un contrôleur
Routes via attributs PHP 8 ou annotations
Méthodes GET, POST
Injection de services
Mr LY (Université IPD) Symfony May 17, 2025 34 / 38
Templates avec Twig
Utilisation de Twig
Héritage de template
Affichage de variables
Conditions, boucles
Mr LY (Université IPD) Symfony May 17, 2025 35 / 38
Formulaires Symfony
Création et gestion de formulaires
Créer une classe de formulaire
Liaison avec entités
Validation
Mr LY (Université IPD) Symfony May 17, 2025 36 / 38
Sécurité et utilisateurs
Authentification et rôles
Configuration de la sécurité
Création d’utilisateurs
Accès par rôles
Mr LY (Université IPD) Symfony May 17, 2025 37 / 38
TPs et mini-projet
Mise en pratique
TP : CRUD sur une entité
Mini-projet Symfony avec formulaire, base de données, et
authentification
Mr LY (Université IPD) Symfony May 17, 2025 38 / 38