¿Qué es un service provider?
Los service providers son el lugar central donde se realiza el bootstrapping de toda una aplicación Laravel. Tanto tu propia aplicación como todos los servicios centrales de Laravel se inicializan a través de service providers. Por “bootstrap” entendemos registrar cosas como bindings del contenedor de servicios, listeners de eventos, middleware, rutas y demás. Los service providers son el lugar central donde configuras la aplicación. Internamente, Laravel usa muchos service providers para inicializar servicios centrales como mailer, colas o caché. Muchos son “diferidos”: no se cargan en cada solicitud, sino solo cuando se necesita realmente el servicio que ofrecen. Los service providers definidos por el usuario se registran enbootstrap/providers.php.
Si quieres profundizar en cómo Laravel procesa las solicitudes, consulta la documentación de Ciclo de vida de la solicitud.
Escribir un service provider
Todos los service providers extiendenIlluminate\Support\ServiceProvider. La mayoría incluyen los métodos register y boot.
Genera un nuevo provider con el comando Artisan make:provider. Laravel lo registra automáticamente en bootstrap/providers.php.
El método register
Dentro deregister solo debes hacer bindings al contenedor de servicios. No registres listeners de eventos, rutas u otras funcionalidades en register. Podrías acabar usando por error servicios que aún no se hayan cargado.
$this->app.
Propiedades bindings y singletons
Si vas a registrar muchos bindings sencillos, en vez de hacerlo manualmente puedes usar las propiedadesbindings y singletons. Cuando el framework carga el provider, comprueba automáticamente estas propiedades y registra los bindings.
El método boot
Si registras un view composer en un service provider, hazlo enboot. Este método se llama después de que todos los service providers estén registrados, lo que significa que puedes acceder a todos los servicios registrados por el framework.
Inyección de dependencias en boot
Enboot también puedes usar type-hints para inyectar dependencias. El contenedor de servicios las resuelve automáticamente.
Cómo registrar service providers
Todos los service providers se registran enbootstrap/providers.php. Este archivo devuelve un array con los nombres de las clases de service provider de la aplicación.
En Laravel 13, los service providers se registran en
bootstrap/providers.php, no en el array providers de config/app.php. make:provider añade la entrada automáticamente.make:provider, Laravel añade automáticamente el provider al archivo. Si creas la clase manualmente, añádela tú mismo al array.
Creación de un service provider personalizado
Vamos a crear un service provider personalizado paso a paso.1
Generar el provider
Genera el service provider con Artisan.
2
Hacer el binding en register
Escribe el binding en el método
register del provider generado.3
Registrar en bootstrap/providers.php
Si usas
make:provider, se añade automáticamente. Si no, añádelo tú mismo.Providers diferidos (Deferred Providers)
Si el provider solo registra bindings del contenedor de servicios, puedes diferir su registro hasta que realmente se necesiten. Al diferir su carga se evita leerlo del sistema de archivos en cada solicitud, mejorando el rendimiento. Para crear un provider diferido, implementa la interfaz\Illuminate\Contracts\Support\DeferrableProvider y define el método provides. provides devuelve los bindings del contenedor que registra el provider.
Próximos pasos
Contenedor de servicios
Consulta los detalles del funcionamiento del contenedor de servicios y sus bindings.