Contenedor de inyección de dependencias
Registre servicios y conecte dependencias con el contenedor DI de Symfony.
Contenedor de inyección de dependencias es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué es la inyección de dependencias?
Dependency Injection (DI) es un patrón en el que una clase recibe sus dependencias desde el exterior en lugar de crearlas internamente, lo que hace que el código sea fácil de probar y tenga un acoplamiento débil.
El componente DI de Symfony
El componente symfony/dependency-injection de Symfony proporciona un contenedor IoC potente que puede conectar automáticamente, configurar y almacenar en caché las definiciones de servicios.
$ composer require symfony/dependency-injectionCrear un contenedor
Construya un contenedor y registre servicios.
<?php
use Symfony\Component\DependencyInjection\ContainerBuilder;
$container = new ContainerBuilder();
// Register a service:
$container->register("logger", \App\Logger::class);Añadir argumentos del constructor
Pase argumentos del constructor a las definiciones de servicios.
<?php
$container->register("mailer", \App\Mailer::class)
->addArgument("smtp.example.com")
->addArgument(587);Referencias a servicios
Inyecte un servicio en otro mediante una Reference.
<?php
use Symfony\Component\DependencyInjection\Reference;
$container->register("email_service", \App\EmailService::class)
->addArgument(new Reference("mailer"))
->addArgument(new Reference("logger"));Obtener un servicio
Obtenga un servicio del contenedor. Las dependencias se resuelven automáticamente.
<?php
$emailService = $container->get("email_service");
$emailService->send("user@example.com", "Welcome!");Autoconexión
Con la autoconexión activada, el contenedor inspecciona las indicaciones de tipo e inyecta automáticamente los servicios correspondientes.
<?php
$container->register(EmailService::class)
->setAutowired(true);
// Constructor is: public function __construct(Mailer $mailer, Logger $logger)Parámetros
Almacene los valores de configuración como parámetros del contenedor.
<?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%");Configuración YAML
Defina servicios en YAML (requiere symfony/config y symfony/yaml).
# services.yaml
services:
App\Mailer:
arguments:
- "%mailer.host%"
- "%mailer.port%"Compilar el contenedor
Compile el contenedor para mejorar el rendimiento. Esto valida las definiciones y optimiza el grafo de servicios.
<?php
$container->compile();
// Dump to PHP cache file:
$dumper = new PhpDumper($container);
file_put_contents("CachedContainer.php", $dumper->dump());Servicios compartidos y no compartidos
De forma predeterminada, los servicios son compartidos (singleton). Establezca shared(false) para obtener una instancia nueva cada vez que se recupere el servicio.
Resumen
El contenedor DI de Symfony registra, conecta y resuelve servicios. Utilice la autoconexión para mayor comodidad, parámetros para la configuración y compile el contenedor en producción para mejorar el rendimiento.
Comprobación rápida
¿Qué hace la autoconexión en el contenedor DI de Symfony?
Aprende PHP con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 49
- Lecciones
- 195
Preguntas frecuentes
¿La lección «Contenedor de inyección de dependencias» es gratis?
Sí — el texto completo de «Contenedor de inyección de dependencias» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Contenedor de inyección de dependencias»?
Registre servicios y conecte dependencias con el contenedor DI de Symfony. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar PHP Academy?
No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Contenedor de inyección de dependencias»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de PHP Academy?
Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- HttpFoundation: solicitudes y respuestas
- Contenedor de inyección de dependencias
- EventDispatcher: eventos desacoplados
- Componente Console: comandos CLI