Wat zijn service providers
Service providers vormen het hart van het bootstrappen van je hele Laravel-applicatie. Zowel je eigen applicatie als alle core services van Laravel worden via service providers gebootstrapt. Met “bootstrappen” bedoelen we het registreren van allerlei zaken: bindings in de service container, event listeners, middleware, routes enzovoort. Service providers zijn de centrale plek waar je je applicatie configureert. Laravel gebruikt intern veel service providers om core services zoals de mailer, queues en cache te bootstrappen. Veel van deze providers zijn “deferred” providers: ze worden niet bij elk request geladen, maar alleen wanneer de services die ze leveren daadwerkelijk nodig zijn. Alle door de gebruiker gedefinieerde service providers registreer je in het bestandbootstrap/providers.php.
Wil je meer weten over hoe Laravel requests verwerkt, raadpleeg dan de documentatie over de request-levenscyclus.
Een service provider schrijven
Alle service providers erven van de klasseIlluminate\Support\ServiceProvider. De meeste service providers bevatten een register- en een boot-methode.
Om een nieuwe provider te genereren gebruik je het Artisan-commando make:provider. Laravel registreert de nieuwe provider automatisch in bootstrap/providers.php.
De register-methode
Voer binnen deregister-methode uitsluitend bindings in de service container uit. Probeer geen event listeners, routes of andere functionaliteit te registreren in de register-methode. Je zou anders per ongeluk een service kunnen gebruiken van een service provider die nog niet geladen is.
$this->app toegang tot de service container.
De bindings- en singletons-property’s
Registreer je veel eenvoudige bindings, dan kun je in plaats van elke binding handmatig te registreren de property’sbindings en singletons gebruiken. Wanneer het framework de service provider laadt, controleert het deze property’s automatisch en registreert de bindings.
De boot-methode
Wil je in een service provider view composers registreren, doe dat dan in deboot-methode. Deze methode wordt aangeroepen nadat alle andere service providers zijn geregistreerd. Je hebt dus toegang tot alle andere services die het framework heeft geregistreerd.
Dependency injection in de boot-methode
Ook in deboot-methode kun je afhankelijkheden injecteren via typehints. De service container injecteert de benodigde afhankelijkheden automatisch.
Service providers registreren
Alle service providers registreer je in het bestandbootstrap/providers.php. Dit bestand geeft een array terug met de klassenamen van de service providers van je applicatie.
In Laravel 13 registreer je service providers in
bootstrap/providers.php, niet in de providers-array van config/app.php. Gebruik je het commando make:provider, dan wordt de provider automatisch toegevoegd.make:provider uit, dan voegt Laravel de provider automatisch aan het bestand toe. Heb je de providerklasse handmatig aangemaakt, voeg de klasse dan zelf toe aan de array.
Een eigen service provider maken
Laten we daadwerkelijk een eigen service provider maken.1
De provider genereren
Genereer de service provider met een Artisan-commando.
2
Binden in de register-methode
Schrijf de binding in de
register-methode van de gegenereerde provider.3
Registreren in bootstrap/providers.php
Bij gebruik van
make:provider gebeurt de registratie automatisch. Handmatig? Voeg de provider dan zelf toe.Deferred providers
Registreert een provider uitsluitend bindings in de service container, dan kun je die registratie uitstellen totdat een geregistreerde binding daadwerkelijk nodig is. Door het laden van zulke deferred providers uit te stellen, worden ze niet bij elk request van het bestandssysteem geladen, wat de performance van je applicatie verbetert. Om een deferred provider te maken implementeer je de interface\Illuminate\Contracts\Support\DeferrableProvider en definieer je de methode provides. De methode provides geeft de service container-bindings terug die de provider registreert.
Volgende stap
Service container
Bekijk hoe de service container werkt en de details van bindings.