Cosa sono i service provider
I service provider sono il fulcro del bootstrapping dell’intera applicazione Laravel. Sia la tua applicazione sia tutti i servizi core di Laravel vengono avviati tramite service provider. Per “bootstrap” si intende registrare vari elementi: binding sul service container, event listener, middleware, route e altro. I service provider sono il luogo centrale di configurazione dell’applicazione. Laravel usa internamente molti service provider per fare il bootstrap dei servizi core come mailer, code e cache. Molti di questi provider sono “deferred”: non vengono caricati per ogni richiesta ma solo quando i servizi forniti sono effettivamente necessari. Tutti i service provider definiti dall’utente si registrano nel filebootstrap/providers.php.
Se vuoi approfondire come Laravel gestisce le richieste, consulta la documentazione Ciclo di vita della richiesta.
Scrivere un service provider
Tutti i service provider estendonoIlluminate\Support\ServiceProvider. La maggior parte include i metodi register e boot.
Per generarne uno nuovo usa il comando Artisan make:provider. Laravel lo registra automaticamente in bootstrap/providers.php.
Metodo register
Nel metodoregister esegui solo binding sul service container. Non tentare di registrare qui event listener, route o altre funzionalità: potresti usare per errore servizi forniti da provider non ancora caricati.
$this->app.
Proprietà bindings e singletons
Se registri molti binding semplici, invece di scriverli uno per uno puoi usare le proprietàbindings e singletons. Quando il framework carica il provider, controlla automaticamente queste proprietà e registra i binding.
Metodo boot
Se in un service provider devi registrare un view composer, fallo nel metodoboot. Questo metodo viene chiamato dopo che tutti gli altri service provider sono stati registrati, quindi hai accesso a tutti gli altri servizi già registrati dal framework.
Dependency injection nel metodo boot
Anche nel metodoboot puoi usare il type hint per iniettare dipendenze. Il service container inietterà automaticamente quelle richieste.
Come registrare i service provider
Tutti i service provider vanno registrati nel filebootstrap/providers.php, che restituisce un array di nomi di classi provider.
In Laravel 13, i service provider si registrano in
bootstrap/providers.php invece che nell’array providers di config/app.php. Il comando make:provider li aggiunge automaticamente.make:provider, Laravel aggiunge automaticamente il provider al file. Se crei manualmente una classe provider, aggiungila manualmente all’array.
Creazione di un service provider personalizzato
Vediamo come creare in pratica un service provider personalizzato.1
Genera il provider
Genera un service provider con il comando Artisan.
2
Effettua il binding nel metodo register
Scrivi i binding nel metodo
register del provider generato.3
Registra in bootstrap/providers.php
Con
make:provider la registrazione è automatica. Se manuale, aggiungilo.Provider differiti (Deferred Providers)
Se un provider registra solo binding sul service container, puoi ritardarne la registrazione fino a quando i binding non sono realmente necessari. Ritardare il caricamento di questi provider evita di caricarli dal filesystem a ogni richiesta e migliora le prestazioni. Per creare un provider differito implementa l’interfaccia\Illuminate\Contracts\Support\DeferrableProvider e definisci il metodo provides. Il metodo provides restituisce i binding sul service container che il provider registra.
Prossimi passi
Service container
Rivedi il meccanismo del service container e i dettagli sui binding.