0% ont trouvé ce document utile (0 vote)
67 vues38 pages

Cours Symfony

Transféré par

groupcal2023
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
67 vues38 pages

Cours Symfony

Transféré par

groupcal2023
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi