Symfony 7 : initiation au framework PHP professionnel
Prendre en main Symfony 7 pour construire des applications web robustes et maintenables. Architecture MVC, Doctrine ORM, Twig, formulaires et sécurité : les fondamentaux du standard professionnel PHP.
Dernière mise à jour le 16/03/2026
Public visé
- Développeurs PHP maîtrisant les bases du langage et la programmation orientée objet souhaitant adopter un framework professionnel.
- Personnes ayant suivi les formations PHP moderne et PHP orienté objet ou disposant d'une expérience équivalente.
- Développeurs souhaitant structurer leurs projets PHP avec un framework enterprise utilisé par de nombreuses entreprises françaises.
- Personnes en reconversion visant un poste de développeur PHP back-end ou full-stack.
Objectifs pédagogiques
- Comprendre l'architecture de Symfony 7 : composants, Flex, bundles et conventions
- Créer des routes et des contrôleurs pour gérer les requêtes HTTP
- Maîtriser Twig pour construire des templates HTML dynamiques et réutilisables
- Modéliser une base de données avec Doctrine ORM : entités, relations et migrations
- Construire des formulaires Symfony avec validation des données
- Mettre en place une authentification complète avec le Security Bundle
- Gérer les rôles et les permissions avec les voters
- Structurer et tester une application Symfony complète en conditions réelles
Prérequis
Programme détaillé
- Symfony dans l'écosystème PHP : histoire, adoption en entreprise, communauté
- Les composants Symfony : des briques réutilisables indépendantes du framework
- Symfony Flex : recettes, plugins et configuration automatique
- Symfony vs Laravel : positionnement et cas d'usage
- Ce que Symfony apporte concrètement par rapport à un MVC maison
- Installer Symfony CLI et créer un projet avec symfony new
- Structure du projet : src/, config/, templates/, var/, public/
- Le kernel Symfony : point d'entrée et cycle de vie d'une requête
- Le fichier .env : variables d'environnement et configuration locale
- La console Symfony : les commandes essentielles bin/console
- Le Profiler et la Web Debug Toolbar : déboguer en développement
- Cas pratique : installer Symfony 7 et explorer la structure avec le Profiler
- Déclarer une route avec les attributs PHP #[Route]
- Routes statiques, dynamiques et avec contraintes de type
- Routes nommées et génération d'URL avec le composant Router
- Routes avec méthodes HTTP : GET, POST, PUT, DELETE
- Lister et déboguer les routes avec bin/console debug:router
- Cas pratique : créer un ensemble de routes pour un blog
- Créer un contrôleur avec le Maker Bundle : make:controller
- La classe AbstractController et ses méthodes utilitaires
- L'objet Request : récupérer les données GET, POST et les headers
- L'objet Response : retourner du HTML, du JSON ou une redirection
- Les messages Flash : transmettre des notifications entre requêtes
- L'injection de services dans le contrôleur
- Cas pratique : contrôleur de blog avec liste, détail et redirection
- La syntaxe Twig : {{ }}, {% %}, {# #}
- Variables, filtres et fonctions Twig
- Les structures de contrôle : if, for, set
- Générer des URLs depuis Twig avec path() et url()
- Inclure un template avec include
- Le template de base : block et extends
- Surcharger un bloc dans un template enfant
- Les macros Twig : factoriser des fragments de template réutilisables
- Passer des variables globales à tous les templates avec Twig globals
- Cas pratique : layout principal avec header, footer et blocs surchargeables
- Le pattern Active Record vs Data Mapper : pourquoi Doctrine choisit Data Mapper
- L'Entity Manager : le chef d'orchestre de Doctrine
- Configurer la connexion à la base de données dans .env
- Créer une entité avec make:entity : propriétés et annotations
- Les types Doctrine : string, integer, text, boolean, datetime
- Générer une migration avec make:migration
- Exécuter et annuler des migrations avec doctrine:migrations:migrate
- Les états d'une entité : new, managed, detached, removed
- persist(), flush() et remove() : écrire dans la base de données
- Cas pratique : entité Article avec migration et premiers enregistrements
- Le repository : l'objet dédié à la lecture des données
- Les méthodes magiques : findAll, findBy, findOneBy
- Le QueryBuilder Doctrine : construire des requêtes dynamiques
- DQL : le langage de requête orienté objet de Doctrine
- Cas pratique : repository Article avec filtres et tri personnalisés
- ManyToOne et OneToMany : relation article/catégorie
- ManyToMany : relation article/tag avec table de jointure
- OneToOne : relation utilisateur/profil
- Le côté propriétaire et le côté inverse d'une relation
- Cascade : persist et remove sur les relations
- Cas pratique : entités Article, Categorie et Tag avec leurs relations
- Lazy loading vs eager loading : le problème des N+1 requêtes
- Optimiser avec les jointures dans le QueryBuilder
- Cas pratique : afficher les articles avec leurs catégories en une seule requête
- Créer un FormType avec make:form
- Les champs Symfony : TextType, EmailType, ChoiceType, EntityType, DateType
- Options des champs : label, required, attr, mapped
- Afficher un formulaire dans Twig : form_start, form_row, form_end
- Personnaliser le rendu d'un formulaire avec form_widget et form_errors
- Traiter la soumission avec handleRequest et isSubmitted/isValid
- Les contraintes de validation : NotBlank, Email, Length, Regex, UniqueEntity
- Afficher les erreurs de validation dans le template
- Cas pratique : formulaire de création et d'édition d'article avec validation
- Le Security Bundle : vue d'ensemble et configuration dans security.yaml
- Créer l'entité User avec make:user : UserInterface et PasswordAuthenticatedUserInterface
- Générer le système de connexion avec make:security:form-login
- Hacher les mots de passe avec PasswordHasher
- La page de connexion : LoginFormAuthenticator et le formulaire
- La déconnexion et la redirection après connexion
- Cas pratique : système de connexion complet avec redirection selon le rôle
- Créer un formulaire d'inscription avec make:registration-form
- Les rôles Symfony : ROLE_USER, ROLE_ADMIN et hiérarchie des rôles
- Restreindre l'accès par route dans security.yaml avec access_control
- Restreindre l'accès dans un contrôleur avec #[IsGranted] et denyAccessUnlessGranted
- Afficher du contenu conditionnel dans Twig avec is_granted
- Pourquoi les voters : gérer des permissions métier complexes
- Créer un voter avec make:voter
- Appliquer un voter depuis un contrôleur ou un template Twig
- Cas pratique : voter pour autoriser uniquement l'auteur à modifier son article
- Qu'est-ce qu'un service ? Le principe de l'inversion de contrôle
- L'autowiring Symfony : injection automatique par type-hinting
- Créer un service métier et l'injecter dans un contrôleur
- Les services scalaires : injecter des paramètres de configuration
- Lister les services disponibles avec bin/console debug:autowiring
- Cas pratique : service de gestion des slugs pour les articles
- Le composant EventDispatcher : émettre et écouter des événements
- Créer un EventListener et un EventSubscriber
- Les événements du kernel : KernelEvents::REQUEST, RESPONSE, EXCEPTION
- Les événements Doctrine : PrePersist, PostUpdate pour automatiser des traitements
- Cas pratique : listener qui génère automatiquement le slug avant la persistance
- Configurer le composant Mailer dans .env
- Créer et envoyer un email avec TemplatedEmail et un template Twig
- Tester les emails en développement avec Mailtrap ou le transport null
- Cas pratique : email de confirmation d'inscription
- Créer une commande avec make:command
- Définir des arguments et des options
- Afficher de la progression avec ProgressBar
- Cas pratique : commande de purge des articles expirés
- Paginer des résultats avec KnpPaginatorBundle
- Gérer l'upload d'un fichier dans un formulaire Symfony
- Valider et déplacer le fichier uploadé
- Cas pratique : liste d'articles paginée et upload d'image de couverture
- Cahier des charges : plateforme de blog avec espace d'administration
- Fonctionnalités : authentification complète avec inscription et connexion, gestion des rôles ROLE_USER et ROLE_ADMIN, CRUD articles avec catégories et tags, voter pour les permissions d'édition, formulaires avec validation, upload d'image de couverture, pagination de la liste des articles, email de confirmation d'inscription, interface d'administration réservée aux admins
- Étape 1 : modélisation des entités et migrations
- Étape 2 : authentification et gestion des rôles
- Étape 3 : CRUD articles avec formulaires et upload
- Étape 4 : voter, pagination et emails
- Revue de code collective : architecture, sécurité, conventions Symfony
- Retour formateur individualisé sur le projet rendu
Compétences visées
- Développer une application Symfony 7 complète en respectant les conventions du framework
- Modéliser et interroger une base de données relationnelle avec Doctrine ORM
- Construire des interfaces HTML dynamiques avec Twig
- Mettre en place un système d'authentification et de gestion des rôles
- Valider et traiter des formulaires complexes côté serveur
- Utiliser la console Symfony et les outils de débogage (Profiler, Maker Bundle)
Modalités et méthodes pédagogiques
Modalités d'évaluation
- En cours de formation : exercices pratiques et mini-projets corrigés à chaque module
- En fin de formation : réalisation d'une application Symfony 7 complète avec authentification, Doctrine ORM et gestion des rôles
- Questionnaire d'auto-évaluation des acquis en fin de parcours
Critères d'évaluation
- Respect des conventions Symfony : structure du projet, nommage, utilisation du Maker Bundle
- Modélisation correcte des entités Doctrine avec leurs relations et migrations
- Implémentation fonctionnelle de l'authentification et de la gestion des rôles
- Formulaires valides avec contraintes de validation adaptées aux données métier
- Qualité et lisibilité du code : séparation des responsabilités, injection de dépendances, absence de logique métier dans les contrôleurs
Modalités de validation
Moyens pédagogiques et techniques
- Support de cours numérique mis à disposition des apprenants
- Dépôt GitHub de démonstration avec exercices et corrections par module
- Environnement de développement : VS Code + Symfony CLI + Docker ou Laragon
- Pour le distanciel : visioconférence (Zoom ou équivalent), partage d'écran, chat en direct
- Accès à la plateforme pédagogique LaPolaris (supports, ressources, émargement)
Accessibilité aux personnes en situation de handicap
Suivi et accompagnement
- Feuilles d'émargement signées par demi-journée (présentiel) ou émargement numérique (distanciel)
- Traçabilité des activités pédagogiques réalisées
- Attestation d'assiduité délivrée en fin de formation
- Suivi individuel via les exercices corrigés et le projet de synthèse
Conditions d'accès
Délais d'accès
Autres formations en Développement Backend
PHP moderne : bases du développement côté serveur
Apprendre PHP 8, le langage serveur le plus utilisé du web. Variables, fonctions, connexion à une base de données MySQL : les bases pour construire des applications web dynamiques.
Spring Boot : développer des API REST en Java
Créer des API REST robustes et sécurisées avec Spring Boot. Injection de dépendances, Spring Data JPA, Spring Security avec JWT, gestion des erreurs et déploiement : le standard du backend Java en entreprise.
PHP orienté objet : concevoir des applications structurées
Maîtriser la programmation orientée objet en PHP 8. Classes, héritage, interfaces, traits, design patterns et architecture MVC : écrivez un code PHP professionnel, maintenable et réutilisable.