Skip to main content

Qu’est-ce qu’un service provider

Les service providers constituent le point central de l’amorçage (bootstrapping) d’une application Laravel. Votre propre application, comme tous les services centraux de Laravel, est amorcée via des service providers. Par « amorcer », on entend enregistrer des choses : bindings au conteneur de services, listeners d’événements, middlewares, routes… Les service providers sont l’endroit central où configurer l’application. En interne, Laravel utilise de nombreux service providers pour amorcer ses services centraux : mailer, queue, cache, etc. Beaucoup sont « différés » : ils ne sont pas chargés à chaque requête, mais uniquement lorsque le service qu’ils fournissent est réellement demandé. Tous les service providers utilisateur s’enregistrent dans bootstrap/providers.php.
Pour en savoir plus sur la façon dont Laravel traite une requête, consultez la documentation du cycle de vie d’une requête.

Écrire un service provider

Tous les service providers héritent de Illuminate\Support\ServiceProvider. La plupart contiennent une méthode register et une méthode boot. Pour générer un provider, utilisez la commande Artisan make:provider. Laravel l’ajoute automatiquement à bootstrap/providers.php.

Méthode register

Dans register, contentez-vous d’enregistrer des bindings dans le conteneur de services. Ne tentez pas d’enregistrer des listeners, des routes ou d’autres fonctionnalités : vous pourriez utiliser par mégarde un service dont le provider n’est pas encore chargé.
Dans un service provider, $this->app donne accès au conteneur de services.

Propriétés bindings et singletons

Pour de nombreux bindings simples, plutôt que de les enregistrer un par un, utilisez les propriétés bindings et singletons. Laravel les inspecte automatiquement lors du chargement du provider.

Méthode boot

Enregistrez les view composers dans boot. Cette méthode est appelée après l’enregistrement de tous les autres providers, ce qui garantit l’accès à tous les services enregistrés par le framework.
Ne confondez pas les rôles de register et boot. register sert uniquement à l’enregistrement des bindings ; boot sert à l’initialisation des services et au reste.

Injection dans boot

Vous pouvez également injecter des dépendances dans boot via type-hint. Le conteneur les résout automatiquement.

Enregistrement des service providers

Tous les service providers s’enregistrent dans bootstrap/providers.php. Ce fichier retourne un tableau de noms de classes de providers.
Sous Laravel 13, l’enregistrement se fait dans bootstrap/providers.php et non plus dans le tableau providers de config/app.php. make:provider l’ajoute automatiquement.
Après make:provider, Laravel ajoute automatiquement le provider. Si vous créez la classe manuellement, ajoutez-la vous-même au tableau.

Créer un service provider personnalisé

Voyons comment en créer un.
1

Générer le provider

2

Ajouter les bindings dans `register`

3

Ajouter à `bootstrap/providers.php`

Avec make:provider, c’est automatique ; sinon, ajoutez-le manuellement.

Providers différés (Deferred Providers)

Si un provider n’enregistre que des bindings, vous pouvez différer son chargement jusqu’à ce que ces bindings soient réellement demandés. Cela évite de charger le provider sur chaque requête et améliore les performances. Pour créer un provider différé, implémentez \Illuminate\Contracts\Support\DeferrableProvider et définissez la méthode provides qui retourne les bindings enregistrés.
Les providers différés conviennent aux services utilisés dans un contexte précis, non partout dans l’application. On évite le chargement inutile et on optimise les performances.

Prochaines étapes

Conteneur de services

Approfondissez le fonctionnement du conteneur de services et les bindings.
Dernière modification le 13 juillet 2026