Partie 5 — Injection de dépendances & Services
Public : vous savez router et écrire des contrôleurs fins (Partie 4). Ces contrôleurs délèguent à des services — il est temps de comprendre d’où viennent ces services et comment Symfony les fabrique et les branche. Objectif de la partie : maîtriser le conteneur de services, l’autowiring, la configuration des services et des paramètres, les tags et l’autoconfiguration, les compiler passes, les bundles, et l’EventDispatcher. C’est le système nerveux de Symfony : tout le framework en dépend.
Ce que vous saurez faire à la fin de cette partie
- Expliquer ce qu’est le conteneur et pourquoi l’injection de dépendances rend le code testable et découplé.
- Créer des services, les faire autowirer, et injecter des interfaces plutôt que des classes.
- Configurer des paramètres, des services explicites, et adapter la config par environnement.
- Comprendre tags, autoconfiguration et service locators — comment Symfony collecte des familles de services.
- Savoir ce qu’est une compiler pass et le rôle d’un bundle.
- Réagir à des événements avec un EventSubscriber (le pendant applicatif du pipeline vu en Partie 4).
Le fil rouge dans cette partie
On extrait les premiers services métier de BookLab (BookingCreator, SlotAvailabilityChecker…), on injecte des interfaces, et on branche un subscriber (par ex. journaliser chaque réservation créée).
Chapitres de cette partie
- Le conteneur & l’autowiring — inversion de contrôle, services, autowiring, injection par constructeur, injecter des interfaces.
- Config des services, paramètres, environnements —
services.yaml, paramètres, liaisons,#[Autowire], config par env. - Tags, autoconfiguration & service locators — collecter des familles de services,
#[AutoconfigureTag],#[TaggedIterator], locators. - Compiler passes & bundles — modifier le conteneur à la compilation, anatomie d’un bundle, extension de config.
- EventDispatcher — événements, listeners, subscribers,
#[AsEventListener]; réagir sans coupler.
Prochain chapitre : 5.1 — Le conteneur & l’autowiring.