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-injectionTworzenie 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
- HttpFoundation: żądanie i odpowiedź
- Kontener DependencyInjection
- EventDispatcher: niezależne od siebie zdarzenia
- Komponent Console: polecenia CLI