En Laravel, los eventos y listeners son una forma organizada de manejar acciones que ocurren dentro de tu aplicación. Cuando se ejecuta un evento, se pueden disparar una o varias acciones (listeners) que reaccionan a dicho evento, manteniendo el código más limpio y desacoplado.
En versiones anteriores de Laravel se definía un EventServiceProvider en el cual se registraban manualmente los eventos y listeners. Sin embargo, a partir de Laravel 11, la detección de los listeners se hace de forma automática escaneando tu directorio Listeners. Cualquier método que comience con handle o sea un método __invoke() será registrado como listener para el evento que se pase como hint en su firma.
¿Cuándo usar eventos y listeners?
Los eventos son útiles cuando queremos ejecutar determinadas acciones en distintos puntos de nuestro sistema sin acoplarlas directamente. Por ejemplo:
Cuando se crea un nuevo pedido (NewOrder), podemos:
Enviar factura al cliente
Notificar al administrador
Actualizar el inventario
Cada una de estas acciones se maneja de forma independiente a través de listeners específicos.
Definiendo un evento: NewOrder
Veamos primero cómo definir el evento que se disparará cuando un usuario realice un pedido:
Con este código:
Order es el modelo que representa el pedido.
Se inyecta en el evento a través del constructor, para que los listeners puedan acceder a él.
Se utilizan traits como
Dispatchableque facilita la ejecución del evento ySerializesModelsque se encarga de serializar el modelo para la cola de trabajo (en caso de usar colas).
Creando listeners a partir de Laravel 11
En Laravel 11, cualquier clase dentro de app/Listeners (o el directorio que prefieras para organizar tus listeners) que tenga un método handle (o __invoke) y reciba como parámetro el evento que deseas procesar, será detectada automáticamente sin necesidad de registrarla en un EventServiceProvider.
Veamos un ejemplo de cada listener propuesto en la entrada original:
1. Listener SendInvoiceToCustomer
2. Listener NotifyOrderToAdmin
3. Listener UpdateStock
Nota: Observa que en la firma del método
handlese indica que el parámetro es un objeto de tipoNewOrder, lo que hace que Laravel asuma que esta clase es un listener de dicho evento.
Despachando (disparando) un evento
Para disparar un evento, simplemente importamos la clase y llamamos a su método dispatch():
Cuando invoques NewOrder::dispatch($order), Laravel buscará automáticamente las clases listeners que tengan un método handle o __invoke con la firma (NewOrder $event) y ejecutará sus respectivas lógicas.
Manejo de colas en eventos
Si deseas que los listeners se ejecuten de manera asíncrona (usando colas), puedes configurar tu listener para que implemente la interfaz ShouldQueue y utilice el trait InteractsWithQueue. Por ejemplo:
En este caso, necesitarías asegurarte de que tu sistema de colas esté configurado correctamente.
Diferencias principales con versiones anteriores
Registro automático de listeners:
En Laravel 10 y anteriores, se solía usar elEventServiceProviderpara registrar los eventos y los listeners en la propiedad$listen. Ahora, en Laravel 11, basta con colocar las clases listener en el directorioListenersy Laravel las registrará automáticamente siempre que los métodos correspondan a la convención (handleo__invoke).Simplicidad al despachar eventos:
La forma de despachar eventos sigue siendo muy sencilla. Puedes utilizarEvent::dispatch()o directamenteMyEvent::dispatch(). El resultado es el mismo.Menos configuración inicial:
Ya no necesitas elEventServiceProvidera menos que quieras realizar configuraciones muy específicas o desactivar la auto-descubierta de listeners.
Recursos Adicionales
Documentación oficial de Laravel 11:
Para mayor detalle sobre eventos y listeners, revisa la documentación oficial.Ruta de aprendizaje de Laravel 11
Si deseas profundizar en Laravel 11 y conocer más funcionalidades y buenas prácticas, te invito a seguir la Ruta de aprendizaje de Laravel 11. Ahí podrás encontrar cursos, proyectos prácticos y ejemplos detallados.
Conclusión
El uso de eventos y listeners en Laravel permite mantener una arquitectura limpia y desacoplada, facilitando la lectura y el mantenimiento de tu aplicación. Con los cambios introducidos en Laravel 11, el proceso se simplifica aún más, gracias al registro automático de listeners y la ausencia de un EventServiceProvider obligatorio.
En este artículo hemos visto:
Cómo definir un evento (
NewOrder).Cómo crear múltiples listeners que reaccionan a un mismo evento.
Cómo disparar un evento y manejar la lógica en cada listener.
Las diferencias clave con versiones anteriores de Laravel.
¡Espero que te haya servido esta guía acerca de eventos y listeners en Laravel! No olvides visitar la Ruta de aprendizaje de Laravel 11 para continuar tu formación y profundizar en las novedades de Laravel.
¡Gracias por leer y feliz desarrollo con Laravel 11!
Curso Laravel 12
Completo 2026
El único curso 100% actualizado que incluye Laravel 12, Livewire 3, Vue 3, React 19 e Inertia 2. Aprende con proyectos reales y las últimas funcionalidades.
star Incluido en cualquier suscripción