0Pricing
PHP Academy · Lekcja

Kontener DependencyInjection

Rejestruj usługi i łącz zależności za pomocą kontenera DI Symfony

Kontener DependencyInjection to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.

Czym jest wstrzykiwanie zależności?

Wstrzykiwanie zależności (DI) to wzorzec, w którym klasa otrzymuje zależności z zewnątrz zamiast tworzyć je we własnym zakresie, dzięki czemu kod można testować, a klasy są luźno powiązane.

Komponent DI Symfony

Komponent Symfony symfony/dependency-injection udostępnia zaawansowany kontener IoC, który może automatycznie konfigurować i łączyć usługi oraz buforować ich definicje.

$ composer require symfony/dependency-injection

Tworzenie kontenera

Należy utworzyć kontener i zarejestrować usługi.

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

$container = new ContainerBuilder();

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

Dodawanie argumentów konstruktora

Należy przekazać argumenty konstruktora do definicji usług.

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

Odwołania do usług

Jedną usługę należy wstrzyknąć do innej za pomocą obiektu Reference.

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

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

Pobieranie usługi

Należy pobrać usługę z kontenera. Zależności zostaną rozwiązane automatycznie.

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

Autowiring

Po włączeniu autowiringu kontener analizuje wskazówki typów i automatycznie wstrzykuje pasujące usługi.

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

Parametry

Wartości konfiguracyjne należy przechowywać jako parametry kontenera.

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

Konfiguracja w YAML

Usługi należy definiować w YAML (wymaga to pakietów symfony/config i symfony/yaml).

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

Kompilowanie kontenera

Należy skompilować kontener, aby zwiększyć wydajność. Spowoduje to zweryfikowanie definicji i zoptymalizowanie grafu usług.

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

Usługi współdzielone i niewspółdzielone

Domyślnie usługi są współdzielone (singleton). Należy ustawić shared(false), aby przy każdym pobraniu usługi otrzymywać nową instancję.

Podsumowanie

Kontener DI Symfony rejestruje, łączy i rozwiązuje usługi. Dla wygody należy używać autowiringu, do konfiguracji parametrów, a w środowisku produkcyjnym kompilować kontener w celu zwiększenia wydajności.

Szybkie sprawdzenie

Co robi autowiring w kontenerze DI Symfony?

Często zadawane pytania

Czy lekcja „Kontener DependencyInjection” jest bezpłatna?

Tak — pełny tekst „Kontener DependencyInjection” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Kontener DependencyInjection”?

Rejestruj usługi i łącz zależności za pomocą kontenera DI Symfony Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć PHP Academy?

Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Kontener DependencyInjection”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?

Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. HttpFoundation: żądanie i odpowiedź
  2. Kontener DependencyInjection
  3. EventDispatcher: niezależne od siebie zdarzenia
  4. Komponent Console: polecenia CLI
← Powrót do PHP Academy