Service providers: cargar componentes sin instanciar

Clase 25 de 33Curso Avanzado de Laravel

Contenido del curso

Laravel y Base de Datos

    Resumen

    Comprender cómo Laravel organiza y carga sus componentes internos es fundamental para construir aplicaciones robustas. Los service providers son las piezas centrales que permiten registrar clases, servicios y funcionalidades dentro del service container, y conocer su funcionamiento te dará control total sobre la inicialización de tu aplicación.

    ¿Qué son los service providers y dónde se ubican?

    Los service providers son clases encargadas de cargar los servicios esenciales dentro de una aplicación Laravel. Se encuentran en la carpeta app/providers [00:20]. Un ejemplo que ya viene incluido es AppServiceProvider, donde se registran elementos como los gates para políticas de autorización.

    Todos los service providers extienden de la clase base ServiceProvider, y están compuestos por dos métodos principales:

    • register: registra clases o servicios que necesitan cargarse dentro del container [01:05].
    • boot: se ejecuta después de que todos los servicios se hayan registrado, permitiendo cargar elementos que dependen de otros servicios ya disponibles [01:15].

    El orden de ejecución es claro: Laravel levanta la aplicación, ejecuta el método register de cada provider y, una vez que todos están registrados, ejecuta el método boot de cada uno.

    ¿Cómo crear y registrar un service provider personalizado?

    Para generar un nuevo service provider, se utiliza el comando de Artisan [00:50]:

    bash php artisan make:provider RatingProvider

    Esto crea una clase dentro de app/providers con los métodos register y boot listos para personalizar.

    ¿Cómo usar el método boot con un view composer?

    Dentro del método boot del nuevo RatingProvider, se puede definir un view composer para compartir datos con una vista específica [01:35]. El helper view() ofrece el método composer, que recibe el nombre de la vista y una función anónima:

    php public function boot() { view()->composer('home', function ($view) { $view->with('rating', RatingResource::collection(Rating::all())); }); }

    En este ejemplo se comparte la variable rating con la vista home, pasando una colección de todos los registros de calificaciones a través de un resource [02:25].

    ¿Cómo activar el provider en la configuración?

    Después de crear el provider, es necesario registrarlo en el archivo config/app.php, dentro del array providers [02:05]:

    php 'providers' => [ // ... App\Providers\RatingProvider::class, ],

    Sin este paso, Laravel no reconocerá el provider y los servicios definidos en él no estarán disponibles.

    ¿Cómo consumir los datos compartidos en la vista?

    Una vez registrado el provider, la variable rating queda disponible en la vista home. Para mostrar los datos se utiliza un @foreach en la plantilla Blade [02:50]:

    blade

    <ul> @foreach($rating as $r) <li>{{ $r->rateable->name }} - {{ $r->score }}</li> @endforeach </ul>

    Esto imprime el nombre del producto asociado a la calificación junto con su puntuación, mostrando todos los registros almacenados en la base de datos [03:15].

    El resultado práctico es que, gracias al service provider, se inicializó un componente y se compartieron datos con una vista sin necesidad de instanciar clases manualmente en cada controlador o ruta. Este patrón mantiene el código limpio y desacoplado.

    La relación entre los elementos es directa: cada petición viaja por el ciclo de vida de Laravel, se comunica con los service providers y estos operan dentro del service container, que actúa como la caja principal que gestiona todas las dependencias. Con esta base sólida, el siguiente paso natural es construir paquetes reutilizables para cualquier aplicación Laravel. ¿Ya has creado tu propio service provider? Comparte tu experiencia en los comentarios.