Proveedores de Servicios
Última actualización
¿Te fue útil?
Última actualización
¿Te fue útil?
Los proveedores de servicios son el lugar central de todo el bootstrapping de aplicaciones Laravel. Tu propia aplicación, así como todos los servicios centrales de Laravel, se arrancan a través de proveedores de servicios.
Pero, ¿qué queremos decir con "bootstrapped"? En general, nos referimos a registrar cosas, incluyendo el registro de enlaces de contenedores de servicios, escuchadores de eventos, middleware e incluso rutas. Los proveedores de servicios son el lugar central para configurar tu aplicación.
Si abres el archivo config/app.php
incluido con Laravel, verás un array providers
. Estas son todas las clases de proveedores de servicios que se cargarán en tu aplicación. Por defecto, un conjunto de proveedores de servicios del núcleo de Laravel se enumeran en esta matriz. Estos proveedores arrancan los componentes principales de Laravel, como el mailer, la cola, la caché y otros. Muchos de estos proveedores son proveedores "diferidos", lo que significa que no se cargarán en cada petición, sino sólo cuando los servicios que proporcionan sean realmente necesarios.
En esta visión general, usted aprenderá cómo escribir sus propios proveedores de servicios y registrarlos con su aplicación Laravel.
Todos los proveedores de servicios extienden la clase Illuminate\Support\ServiceProvider
. La mayoría de los proveedores de servicios contienen un método register
y un método boot
. Dentro del método register
, deberías sólo enlazar cosas en el . Nunca debes intentar registrar escuchadores de eventos, rutas o cualquier otra funcionalidad dentro del método register
.
La CLI de Artisan puede generar un nuevo proveedor mediante el comando make:provider
:
Como se mencionó anteriormente, dentro del método register
, sólo debe enlazar cosas en el . Nunca se debe intentar registrar escuchadores de eventos, rutas o cualquier otra funcionalidad dentro del método register
. De lo contrario, puede utilizar accidentalmente un servicio proporcionado por un proveedor de servicios que aún no se ha cargado.
Echemos un vistazo a un proveedor de servicios básico. Dentro de cualquiera de sus métodos de proveedor de servicios, siempre tiene acceso a la propiedad $app
que proporciona acceso al contenedor de servicios:
bindings
y singletons
Si tu proveedor de servicios registra muchos enlaces simples, puedes utilizar las propiedades bindings
y singletons
en lugar de registrar manualmente cada enlace del contenedor. Cuando el framework cargue el proveedor de servicios, buscará automáticamente estas propiedades y registrará sus enlaces:
Todos los proveedores de servicios se registran en el archivo de configuración config/app.php
. Este fichero contiene un array providers
donde puedes listar los nombres de las clases de tus proveedores de servicios. Por defecto, un conjunto de proveedores de servicios del núcleo de Laravel se enumeran en esta matriz. Estos proveedores arrancan los componentes principales de Laravel, como el mailer, la cola, la caché y otros.
Para registrar su proveedor, añádalo a la matriz:
Laravel compila y almacena una lista de todos los servicios suministrados por los proveedores de servicios diferidos, junto con el nombre de su clase de proveedor de servicios. Entonces, sólo cuando se intenta resolver uno de estos servicios Laravel carga el proveedor de servicios.
Para aplazar la carga de un proveedor, implemente la interfaz Illuminate\Contracts\Support\DeferrableProvider
y defina un método provides
. El método provides
debe devolver los enlaces del contenedor de servicios registrados por el proveedor:
Este proveedor de servicios sólo define un método register
, y utiliza ese método para definir una implementación de App\Services\Riak\Connection
en el contenedor de servicios. Si aún no estás familiarizado con el contenedor de servicios de Laravel, consulta .
Entonces, ¿qué pasa si necesitamos registrar un dentro de nuestro proveedor de servicios? Esto debería hacerse dentro del método boot
. Este método es llamado después de que todos los demás proveedores de servicios han sido registrados, lo que significa que tienes acceso a todos los demás servicios que han sido registrados por el framework:
Puedes inyectar dependencias para el método boot
de tu proveedor de servicios. El inyectará automáticamente cualquier dependencia que necesites:
Si tu proveedor sólo registra enlaces en el , puedes optar por aplazar su registro hasta que uno de los enlaces registrados sea realmente necesario. Aplazar la carga de un proveedor de este tipo mejorará el rendimiento de su aplicación, ya que no se carga desde el sistema de archivos en cada solicitud.