Service Provider en Laravel

Cuando trabajamos en Laravel hacemos algo mas o menos así: Crear rutas, controladores, métodos, consultas y vistas ¿correcto? – Es importante darle énfasis a esto porque los Service Provider se ejecutan antes de que Laravel llegue a nuestro sistema o rutas… ¡Interesante!

No quisiera avanzar con el registro y configuración sin asegurarme de que conoces el ciclo de vida real, esto te hace mas profesional y te da un valor agregado como programador 🙂

Ciclo de vida

Esto lo explico porque debemos conocer en que etapa es que se ejecutan los Service Provider, sabiendo donde van y cuando se ejecutan nos ayuda a tener miles de ideas de uso. Vamos con el ciclo sencillo, ciclo que sucede cada vez que existe una petición.

  1. Petición
  2. Servicios 🙂
  3. Rutas
  4. Tu lógica de programación
  5. Vistas o respuesta

Podemos ir paso a paso explicando cada item, y en otro artículo le dedicaré su respectiva explicación, solo date cuenta que comenzamos básicamente desde el item 3 ¿verdad?…

Subamos un nivel y hablemos del item 2 ¡LOS SERVICIOS!… Aquí hay mucho sobre la magia de Laravel. Los servicios inicializan a Laravel, y este Framework PHP vienen con muchos servicios y funcionalidades increíbles que hace que nuestra vida como programadores sea muy fácil. Por eso a veces digo en forma chistosa “somos usuarios laravel, no programadores”.

Sigamos; Laravel dispara todos los servicios y se asegura de que tenga todo lo necesario para que nuestro código funcione. Hay Servicios por defectos, y nosotros podemos crear nuestros propios servicios.

Resumen de la explicación: Los Service Provider es lo que usamos para cargar todo lo necesario antes de llegar a las rutas.

Explicación practica

Para trabajar con los Service Provider debemos saber que hay que registrarlos, trabajemos para ilustrar el ejemplo con el componente Laravel Collective, para usar el componente, cargar vistas, ir a las rutas, acceder a nuestro código, etc. La aplicación debe verificar que ese Service Provider está registrado (todos deben registrarse)… Ve al archivo config/app.php  hay un array llamado provider  tiene mas o menos este aspecto:

Ahí tenemos el array providers con el componente Laravel Collective registrado.

¿Fuiste al archivo config/app.php ? ¿no?… ve allá y luego vuelve aquí, verás que hay servicios de terceros, otros que pertenecen a Laravel y los tuyos (para cargar interfaces por ejemplo).

Dato: Pudieras quitar algún servicio y así aumentar el rendimiento 🙂 continuemos

Por lo general, al final del archivo encontrarás el siguiente bloque:

Hace referencia a archivos que conseguimos dentro del directorio app

Estructura de un Service Provider

(usemos otro archivo para el ejemplo) veamos al archivo  app/Providers/AppServiceProvider.php

Este archivo es para ser usado por nosotros (con él aprenderemos la estructura de esta clase), como puedes ver extiende de Illuminate\Support\ServiceProvider y eso es algo que deben hacer todos los Service Provider. Hay dos métodos que podemos usar.

  1. boot()
  2. register()

Estos métodos se ejecutan en ese orden, es decir, el método boot() se ejecuta primero. Es mas, se ejecuta de forma muy temprana en el ciclo de arranque de Laravel. Por tanto es un buen lugar para instanciar eventos. La verdad es algo muy poco común, yo muy poco lo he usado.

Por otro lado, lo más probable es que uses el método register(). Es en realidad el mejor lugar para que definamos nuestros servicios :). Es el método usado para asociar nuestro servicio al contenedor y usarlo luego.

Service provider propios

Para ello usamos a php artisan, el comando es el siguiente:  php artisan make:provider RimorsoftServiceProvider … La pregunta es ¿para que? o ¿por qué? y la respuesta no es tan sencilla, en realidad depende de la necesidad, te puedo decir que podemos hacer uso de los Service Providers para básicamente extender alguna funcionalidades de Laravel, podrías extender un paquete, ruta, middleware, eventos, etc. Esto se resumen en reutilización de código y realmente hacer un sistema de acuerdo a tus necesidades.

Importante: No nos compliquemos, esto lo vamos a utilizar si necesitamos que algo suceda antes de acceder a las rutas, o disponer de un servicio global. Debes saber que esto existe para usarlo cuando tú sistema necesite esta solución.

Resumen

  • Para paquetes de terceros: Instalas el paquete y registras el service provider en el archivo config/app.php
  • Para service provider propios: Creas la clase con el comando de php artisan y lo registras en el archivo config/app.php (por supuesto con tu lógica en el método más conveniente, boot o register)

Puede éste artículo hacer que salten algunas dudas …¿por qué?, porque los service provider sirven para asociar servicios al contenedor… entonces la pregunta es ¿qué es un contenedor? ¿…?

Saber que es el contenedor te dará mayor realidad, y ese será mi próximo artículo 🙂

No dejes de comentar, los leo y contesto a todos, es lo que motiva a seguir escribiendo. ¡MUCHAS GRACIAS!

Comparte este artículo

Entra en la discusión y deja tu comentario

Veces