Contêiner de DependencyInjection
Registre serviços e conecte dependências com o contêiner DI do Symfony.
Contêiner de DependencyInjection é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.
O que é injeção de dependências?
Dependency Injection (DI) é um padrão no qual uma classe recebe suas dependências de fora, em vez de criá-las internamente — tornando o código testável e fracamente acoplado.
O componente DI do Symfony
O componente symfony/dependency-injection do Symfony fornece um poderoso contêiner de IoC que pode conectar automaticamente, configurar e armazenar em cache definições de serviços.
$ composer require symfony/dependency-injectionCriando um contêiner
Crie um contêiner e registre serviços.
<?php
use Symfony\Component\DependencyInjection\ContainerBuilder;
$container = new ContainerBuilder();
// Register a service:
$container->register("logger", \App\Logger::class);Adicionando argumentos do construtor
Passe argumentos do construtor para as definições de serviços.
<?php
$container->register("mailer", \App\Mailer::class)
->addArgument("smtp.example.com")
->addArgument(587);Referências de serviços
Injete um serviço em outro usando uma Reference.
<?php
use Symfony\Component\DependencyInjection\Reference;
$container->register("email_service", \App\EmailService::class)
->addArgument(new Reference("mailer"))
->addArgument(new Reference("logger"));Recuperando um serviço
Busque um serviço no contêiner. As dependências são resolvidas automaticamente.
<?php
$emailService = $container->get("email_service");
$emailService->send("user@example.com", "Welcome!");Injeção automática
Com a injeção automática ativada, o contêiner analisa as dicas de tipo e injeta automaticamente os serviços correspondentes.
<?php
$container->register(EmailService::class)
->setAutowired(true);
// Constructor is: public function __construct(Mailer $mailer, Logger $logger)Parâmetros
Armazene valores de configuração como parâmetros do contêiner.
<?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%");Configuração YAML
Defina serviços em YAML (requer symfony/config e symfony/yaml).
# services.yaml
services:
App\Mailer:
arguments:
- "%mailer.host%"
- "%mailer.port%"Compilando o contêiner
Compile o contêiner para obter desempenho. Isso valida as definições e otimiza o grafo de serviços.
<?php
$container->compile();
// Dump to PHP cache file:
$dumper = new PhpDumper($container);
file_put_contents("CachedContainer.php", $dumper->dump());Serviços compartilhados e não compartilhados
Por padrão, os serviços são compartilhados (instância única). Defina shared(false) para obter uma nova instância sempre que o serviço for recuperado.
Resumo
O contêiner de DI do Symfony registra, conecta e resolve serviços. Use a injeção automática por conveniência, parâmetros para configuração e compile o contêiner em produção para obter desempenho.
Verificação rápida
O que a injeção automática faz no contêiner de DI do Symfony?
Perguntas Frequentes
A aula “Contêiner de DependencyInjection” é grátis?
Sim — o texto completo de “Contêiner de DependencyInjection” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.
O que vou aprender em “Contêiner de DependencyInjection”?
Registre serviços e conecte dependências com o contêiner DI do Symfony. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar PHP Academy?
Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Contêiner de DependencyInjection”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de PHP Academy?
Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- HttpFoundation: solicitação e resposta
- Contêiner de DependencyInjection
- EventDispatcher: eventos desacoplados
- Componente Console: comandos CLI