Saltar al contenido

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 Dispatchable que facilita la ejecución del evento y SerializesModels que 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 handle se indica que el parámetro es un objeto de tipo NewOrder, 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

  1. Registro automático de listeners:
    En Laravel 10 y anteriores, se solía usar el EventServiceProvider para registrar los eventos y los listeners en la propiedad $listen. Ahora, en Laravel 11, basta con colocar las clases listener en el directorio Listeners y Laravel las registrará automáticamente siempre que los métodos correspondan a la convención (handle o __invoke).

  2. Simplicidad al despachar eventos:
    La forma de despachar eventos sigue siendo muy sencilla. Puedes utilizar Event::dispatch() o directamente MyEvent::dispatch(). El resultado es el mismo.

  3. Menos configuración inicial:
    Ya no necesitas el EventServiceProvider a 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!

school Curso completo

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.

access_time 8 horas de contenido
layers 4 tecnologías en 1
update 100% actualizado
code Proyectos prácticos
Ver Curso Laravel 12 arrow_forward

star Incluido en cualquier suscripción

Rutas de aprendizaje