Skip to main content

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 bestand bootstrap/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 klasse Illuminate\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 de register-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.
Binnen de methoden van een service provider heb je altijd via de property $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’s bindings 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 de boot-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.
Haal de rollen van de register- en boot-methode niet door elkaar. register is alleen voor het registreren van bindings, boot gebruik je voor het initialiseren van services en andere setup.

Dependency injection in de boot-methode

Ook in de boot-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 bestand bootstrap/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.
Voer je het Artisan-commando 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.
Deferred providers zijn geschikt voor services die je alleen voor specifieke functionaliteit gebruikt, niet in de hele applicatie. Door het onnodig laden van services te vermijden, optimaliseer je de performance.

Volgende stap

Service container

Bekijk hoe de service container werkt en de details van bindings.
Laatst gewijzigd op 6 september 2026