Conforme nuestra aplicación Laravel crece, la lógica del proyecto puede torcerse. Servicios enormes, controladores con demasiadas responsabilidades, etc.
Gracias a los Eventos y Listeners de Laravel podemos evitar estos casos. En este artículo veremos cuándo usarlos y cómo implementarlos.
¿Qué son los Eventos y Listeners en Laravel?
Un evento representa algo que ha ocurrido en nuestra aplicación. Por ejemplo, un usuario añade un artículo a su cesta de la compra. Este evento no hace nada por sí solo, pero nos ofrece algo que sí vamos a poder utilizar, una notificación. Y aquí es donde entran los listeners.
Un listener podríamos definirlo como el que reacciona a la notificación de este evento. Siguiendo el ejemplo de antes, un usuario añade un artículo a su carrito y nuestro listener revisa si ese artículo puede ser beneficiado por algún cupón.
Cuando usamos eventos y listeners conseguimos separar ciertas funcionalidades de nuestra aplicación a sus listeners correspondientes.
Crear un evento
Gracias a Artisan podemos crear un evento de la siguiente manera:
php artisan make:eventLaravel nos preguntará en la terminal a qué clase estamos creando el evento.
Creando el Listener
Para crear nuestro listener volvemos a invocar a make pero en este caso con listener:
php artisan make:listenerAl igual que con los eventos, es posible incluir los argumentos.
Por defecto, Laravel buscará y registrará automáticamente nuestros listeners escaneando la carpeta Listeners de nuestra aplicación.
Es aquí donde ponemos toda la lógica que no queremos mezclar con el controlador.
public function handle(ProductAddedToCart $event)
{
if ($event->product->price > 100) {
// Aquí podríamos aplicar un cupón, avisar al usuario, etc.
}
}Si el listener va a realizar una tarea pesada, podemos ejecutarlo en una cola implementando ShouldQueue.
Conclusión
Los Eventos y Listeners en Laravel nos ayudan a mantener una arquitectura limpia y escalable, por lo que es recomendable usarlos desde fases tempranas de los proyectos.
Fuentes: Documentación oficial de laravel