Eventos y Listeners en Laravel
Clase 13 de 33 • Curso Avanzado de Laravel
Contenido del curso
Entorno de trabajo y repaso de Laravel
Manejo de tu base de datos con Laravel
La terminal de Laravel
Eventos y tareas de Laravel
Manejo de errores
El corazón de Laravel
Creación de paquetes
- 26

Cómo crear paquetes Laravel con Composer
08:51 min - 27
Propiedades para manejo de dependencias
02:02 min - 28
Comprende el archivo composer.json
02:23 min - 29

Cómo Composer carga clases automáticamente
04:18 min - 30

Crear mis propios Services Providers
08:58 min - 31

Cómo publicar archivos con Service Provider
04:12 min - 32

Instalando paquetes desde GitHub con Composer
10:35 min - 33

Publicar tu paquete PHP en Packages
03:12 min
Aprende a usar eventos y listeners en Laravel para automatizar acciones clave: crear un evento cuando un producto es calificado, dispararlo desde un tray y responder con un email de notificación. Verás cómo intervienen EventServiceProvider, el arreglo listen, el helper event, el constructor del evento, el método broadcastOn y los getters.
¿Qué es el manejo de eventos en Laravel y para qué sirve?
Los eventos permiten reaccionar a acciones del usuario dentro del ciclo de vida de la aplicación. Cada acción (clic, teclas) genera un objeto de evento, y un listener captura ese evento para ejecutar lógica.
- Evento: representa una acción iniciada por el usuario y crea un objeto nuevo.
- Listener: clase que escucha eventos específicos y ejecuta una acción.
- Ciclo de vida: el sistema puede disparar eventos en distintos puntos.
¿Dónde se registran en EventServiceProvider?
El corazón está en EventServiceProvider dentro de app/providers. Ahí, el arreglo listen mapea eventos con listeners. Ya existe un ejemplo: cuando se registra un usuario, se envía un email de verificación. Ese patrón guía el registro de tus propios eventos.
¿Qué hace un listener y cuándo actúa?
Un listener tiene un constructor para inyectar servicios y un método handle con la lógica. Escucha un evento específico y se ejecuta cuando ese evento se dispara.
¿Cómo crear y estructurar un evento personalizado en Laravel?
Primero se crea el evento con PHP Artisan make event. En el caso explicado, se define un evento para cuando se califique una entidad, llamado "model rated". El archivo queda en la carpeta events y contiene un constructor y el método broadcast on (no usado por ahora).
- Recibe: el modelo del calificador, el modelo del producto calificado y el score de la calificación.
- Declara propiedades e inicializa en el constructor.
- Implementa getters para recuperar datos al transmitir el evento.
Luego se añade el disparo del evento al tray "can rate". Dentro del método "rate", después de completar la operación, se dispara con el helper event creando una instancia de "model rate rated" con: el calificador (this), el modelo calificado (parámetro) y el score.
¿Dónde y cómo dispararlo con el helper event?
Se coloca el disparo al final del método "rate" del tray. Se usa el helper event con la nueva instancia del evento y los tres datos: quien califica, el modelo calificado y la puntuación.
¿Cómo escuchar el evento y enviar una notificación por email?
Se crea un listener con php artisan make listener para enviar un correo a quienes hayan creado productos cuando estos sean calificados. El listener recibe solo el evento "model rated" y en el método handle ejecuta la lógica.
- Obtiene el ratable desde el evento usando el getter. Corrige el nombre a "ratable" si es necesario.
- Verifica si es instancia de producto para actuar solo en ese caso.
- Crea una notificación y la envía al usuario creador del producto vía la relación "created by" con
notify.
¿Qué incluye la notificación por correo?
Se crea con PHP Artisan mail notification. La notificación recibe tres datos: el nombre del calificador, el nombre del producto y el score. El email muestra un mensaje como: "[nombre] ha calificado tu producto [producto] con [score] estrellas". Ejemplo: "Sergio ha calificado tu producto Sarasa con cinco estrellas".
- Propiedades:
qualifier name(string),product name,score. - Constructor: inicializa dichas propiedades.
- Contenido del email: mensaje personalizado con esos datos.
¿Cómo registrar el mapeo evento-listener?
Con el evento y el listener listos, se registran en EventServiceProvider dentro del arreglo listen: el evento "Model rated Class" y su listener "Send email model rated notification". Tras esto, solo queda probar.
¿Te animas a implementar el evento "un rate model" que se dispara cuando un usuario califica un producto? Comparte tus dudas o avances en los comentarios.