Service Providers - Laravel
Ostatnio omówiłem zagadnienie Service Container-a. Tak więc naturalną koleją rzeczy przyszedł czas na Service Providers .
Ponieważ jedno z drugim się wiąże i działa w perfekcyjnej synergii. Albowiem to Service Providers dostarczają wszystko to co dobre do naszego cudownego Service Container-a .
O co chodzi z tymi Service Providers?
Otóż znajdują się w centrum aplikacji. Dosłownie, ponieważ są to miejsca, w których rejestrujemy wszelkie powiązania (IoC), wydarzenia, middleware czy nawet routing. Głównym zadaniem Service Providers jest właśnie rejestrowanie rzeczy.
Można je podzielić na wbudowane (będące już od początku w świeżej instalacji Laravela), pakietowe (dodatkowe) oraz własne. Lista wszystkich Service Providers znajduje się w "config/app.php". Jest przechowywana jako tablica. Tam też dodajemy i usuwamy wpisy . Jest to lista wszystkich Service Providers które zostaną załadowane wraz z aplikacją.
Jak stworzyć Service Providera?
Bardzo prosto . Ponieważ mamy dostęp do komendy artisana, a mianowicie "php artisan make:provider Provider_Name"
php artisan make:provider RiakServiceProvider
Następnie po jego utworzeniu musimy go zarejestrować poprzez jego wpisanie w tablicę znajdującą się we wcześniej wspomnianym "config/app.php".
'providers' => [
// Inni Providerzy
App\Providers\ComposerServiceProvider::class,
],
Rejestracja w Service Providers
Jak już wcześniej wspomniałem, w Service Providers będziemy rejestrować powiązania (IoC), ale należy to robić tylko i wyłącznie w metodzie "register". W tejże metodzie należy obsługiwać tylko i wyłącznie Service Container.
$this->app->singleton(Connection::class, function ($app) {
return new Connection(config('riak'));
});
A gdzie rejestrujemy resztę rzeczy? Metoda Boot
Od tego jest metoda "boot" . Jest wywoływana dopiero wtedy, kiedy wszystkie serwisy zostaną zarejestrowane, a to oznacza, że mamy dostęp do całej funkcjonalności frameworka . Możemy tutaj rejestrować na przykład tzw. View-Composer - czyli funkcja wywoływana w momencie w którym dany widok jest renderowany. Dzięki temu mamy możliwość bezpośrednio powiązać dane z widokiem .
Przykład z rejestracją view composera:
view()->composer('view', function () {
//
});
W tej metodzie mamy także dostęp do wstrzykiwania zależności poprzez konstruktor który będzie operował na naszym Service Container. Dostarczy nam to, czego potrzebujemy.
Opóźnianie Providera
Mamy również możliwość opóźnienie ładowania Service Providera. Jest to nawet zalecane, ponieważ zwiększa to znacznie wydajność naszej aplikacji. Ale możemy to zrobić tylko gdy rejestrujemy rzeczy w metodzie "register", a metoda "boot" jest pusta.
Gdy dany Provider zostanie opóźniony oznacza to, że zostanie on zarejestrowany dopiero w momencie kiedy będzie on potrzebny, w przeciwnym razie nie jest on ładowany . Tak więc jeśli nie jest potrzebny, to nie będzie ładowany przy każdym żądaniu.
Laravel przechowuje listę wszystkich opóźnionych Service Providers i dopiero w momencie gdy są potrzebne zostają załadowane.
Jeśli chcemy by nasz Service Provider został opóźniony, to wystarczy że dodamy do jego klasy właściwość "defer" o wartości "true" oraz dołączymy metodę "provides" która zwróci tablicę zawierającą powiązania rejestrowane przez ten Provider .
protected $defer = true;
Kończąc
To już wszystko w kwestii Service Providers. Service Container jest pudełkiem które zawiera wszystkie wspaniałości naszej aplikacji a Service Providers do tego pudełka owe rzeczy wrzucają .
Proste . Choć zrozumienie tego przychodzi bardzo ciężko adeptom Laravela . Wyłożyłem jak należy, dziękuję za lekturę i życzę owocnej nauki i pracy w Laravelu .
Dobrego dnia, Bywaj!