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 dansbootstrap/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 deIlluminate\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é.
$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.
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 dansbootstrap/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.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.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.
Prochaines étapes
Conteneur de services
Approfondissez le fonctionnement du conteneur de services et les bindings.