Conteneur DependencyInjection
Enregistrer des services et relier les dépendances avec le conteneur DI de Symfony.
Conteneur DependencyInjection est une leçon PHP Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage PHP Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours PHP Academy comprend 4 leçons au total.
Qu’est-ce que l’injection de dépendances ?
Dependency Injection (DI) est un modèle dans lequel une classe reçoit ses dépendances de l’extérieur au lieu de les créer en interne, ce qui rend le code testable et faiblement couplé.
Le composant DI de Symfony
Le composant symfony/dependency-injection de Symfony fournit un puissant conteneur IoC capable de câbler automatiquement, de configurer et de mettre en cache les définitions de services.
$ composer require symfony/dependency-injectionCréation d’un conteneur
Construisez un conteneur et enregistrez des services.
<?php
use Symfony\Component\DependencyInjection\ContainerBuilder;
$container = new ContainerBuilder();
// Register a service:
$container->register("logger", \App\Logger::class);Ajout d’arguments au constructeur
Transmettez des arguments au constructeur dans les définitions de services.
<?php
$container->register("mailer", \App\Mailer::class)
->addArgument("smtp.example.com")
->addArgument(587);Références de services
Injectez un service dans un autre à l’aide d’une Reference.
<?php
use Symfony\Component\DependencyInjection\Reference;
$container->register("email_service", \App\EmailService::class)
->addArgument(new Reference("mailer"))
->addArgument(new Reference("logger"));Récupération d’un service
Récupérez un service depuis le conteneur. Les dépendances sont résolues automatiquement.
<?php
$emailService = $container->get("email_service");
$emailService->send("user@example.com", "Welcome!");Câblage automatique
Lorsque le câblage automatique est activé, le conteneur inspecte les indications de type et injecte automatiquement les services correspondants.
<?php
$container->register(EmailService::class)
->setAutowired(true);
// Constructor is: public function __construct(Mailer $mailer, Logger $logger)Paramètres
Stockez les valeurs de configuration en tant que paramètres du conteneur.
<?php
$container->setParameter("mailer.host", "smtp.example.com");
$container->setParameter("mailer.port", 587);
// Reference in service definition:
$container->register("mailer", Mailer::class)
->addArgument("%mailer.host%")
->addArgument("%mailer.port%");Configuration YAML
Définissez les services en YAML (nécessite symfony/config et symfony/yaml).
# services.yaml
services:
App\Mailer:
arguments:
- "%mailer.host%"
- "%mailer.port%"Compilation du conteneur
Compilez le conteneur pour améliorer les performances. Cette opération valide les définitions et optimise le graphe des services.
<?php
$container->compile();
// Dump to PHP cache file:
$dumper = new PhpDumper($container);
file_put_contents("CachedContainer.php", $dumper->dump());Services partagés et non partagés
Par défaut, les services sont partagés (singleton). Définissez shared(false) pour obtenir une nouvelle instance à chaque récupération du service.
Résumé
Le conteneur DI de Symfony enregistre, câble et résout les services. Utilisez le câblage automatique pour plus de simplicité, les paramètres pour la configuration, et compilez le conteneur en production pour améliorer les performances.
Vérification rapide
Que fait le câblage automatique dans le conteneur DI de Symfony ?
Questions Fréquemment Posées
La leçon « Conteneur DependencyInjection » est-elle gratuite ?
Oui — le texte complet de « Conteneur DependencyInjection » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours PHP Academy, passe à CoddyKit PRO. Le cours PHP Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Conteneur DependencyInjection » ?
Enregistrer des services et relier les dépendances avec le conteneur DI de Symfony. Tu pratiques PHP Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer PHP Academy ?
Aucune expérience préalable n'est requise. PHP Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Conteneur DependencyInjection » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon PHP Academy ?
Oui. Chaque leçon PHP Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- HttpFoundation : requête et réponse
- Conteneur DependencyInjection
- EventDispatcher : événements découplés
- Composant Console : commandes CLI