0Pricing
PHP Academy · Lezione

Container DependencyInjection

Registrare servizi e collegare le dipendenze con il container DI di Symfony.

Container DependencyInjection è una lezione PHP Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento PHP Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso PHP Academy include 4 lezioni in totale.

Che cos'è la Dependency Injection?

Dependency Injection (DI) è un pattern in cui una classe riceve le proprie dipendenze dall'esterno invece di crearle internamente, rendendo il codice testabile e riducendo l'accoppiamento.

Il componente DI di Symfony

Il componente symfony/dependency-injection di Symfony fornisce un potente contenitore IoC in grado di collegare automaticamente, configurare e memorizzare nella cache le definizioni dei servizi.

$ composer require symfony/dependency-injection

Creazione di un contenitore

Crei un contenitore e registri i servizi.

<?php
use Symfony\Component\DependencyInjection\ContainerBuilder;

$container = new ContainerBuilder();

// Register a service:
$container->register("logger", \App\Logger::class);

Aggiunta degli argomenti del costruttore

Passi gli argomenti del costruttore alle definizioni dei servizi.

<?php
$container->register("mailer", \App\Mailer::class)
    ->addArgument("smtp.example.com")
    ->addArgument(587);

Riferimenti ai servizi

Inietti un servizio in un altro utilizzando un Reference.

<?php
use Symfony\Component\DependencyInjection\Reference;

$container->register("email_service", \App\EmailService::class)
    ->addArgument(new Reference("mailer"))
    ->addArgument(new Reference("logger"));

Recupero di un servizio

Recuperi un servizio dal contenitore. Le dipendenze vengono risolte automaticamente.

<?php
$emailService = $container->get("email_service");
$emailService->send("user@example.com", "Welcome!");

Autowiring

Con l'autowiring attivato, il contenitore analizza i type hint e inietta automaticamente i servizi corrispondenti.

<?php
$container->register(EmailService::class)
    ->setAutowired(true);
// Constructor is: public function __construct(Mailer $mailer, Logger $logger)

Parametri

Memorizzi i valori di configurazione come parametri del contenitore.

<?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%");

Configurazione YAML

Definisca i servizi in YAML (richiede symfony/config e symfony/yaml).

# services.yaml
services:
    App\Mailer:
        arguments:
            - "%mailer.host%"
            - "%mailer.port%"

Compilazione del contenitore

Compili il contenitore per migliorare le prestazioni. Questa operazione convalida le definizioni e ottimizza il grafo dei servizi.

<?php
$container->compile();
// Dump to PHP cache file:
$dumper = new PhpDumper($container);
file_put_contents("CachedContainer.php", $dumper->dump());

Servizi condivisi e non condivisi

Per impostazione predefinita, i servizi sono condivisi (singleton). Imposti shared(false) per ottenere una nuova istanza ogni volta che il servizio viene recuperato.

Riepilogo

Il contenitore DI di Symfony registra, collega e risolve i servizi. Utilizzi l'autowiring per maggiore praticità, i parametri per la configurazione e compili il contenitore in produzione per migliorare le prestazioni.

Verifica rapida

Che cosa fa l'autowiring nel contenitore DI di Symfony?

Domande Frequenti

La lezione «Container DependencyInjection» è gratuita?

Sì — il testo completo di «Container DependencyInjection» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso PHP Academy, passa a CoddyKit PRO. Il corso PHP Academy include 4 lezioni in totale.

Cosa imparerò in «Container DependencyInjection»?

Registrare servizi e collegare le dipendenze con il container DI di Symfony. Eserciti PHP Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare PHP Academy?

Non è richiesta alcuna esperienza precedente. PHP Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Container DependencyInjection»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione PHP Academy?

Sì. Ogni lezione PHP Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. HttpFoundation: richiesta e risposta
  2. Container DependencyInjection
  3. EventDispatcher: eventi disaccoppiati
  4. Componente Console: comandi CLI
← Torna a PHP Academy