🎧 Eventos y Listeners en Laravel

🎧 Eventos y Listeners en Laravel

Desacopla la lógica de tu aplicación con Eventos y Listeners

En Laravel, los Eventos permiten disparar acciones cuando ocurre algo en el sistema (por ejemplo, un usuario se registra o realiza una compra). Los Listeners escuchan esos eventos y ejecutan tareas específicas en respuesta, como enviar un correo o guardar un registro.

📢 ¿Qué es un Evento?

Un Evento representa algo que sucede dentro de la aplicación. Por ejemplo, UsuarioRegistrado puede ser un evento que se dispara cada vez que un nuevo usuario se registra.

🧩 Crear un Evento

Desde la terminal, crea un evento con:


php artisan make:event UsuarioRegistrado
  

Esto genera app/Events/UsuarioRegistrado.php:


namespace App\Events;

use App\Models\User;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class UsuarioRegistrado
{
    use Dispatchable, SerializesModels;

    public $usuario;

    public function __construct(User $usuario)
    {
        $this->usuario = $usuario;
    }
}
  

🎧 Crear un Listener

Los Listeners reaccionan a un evento cuando ocurre.


php artisan make:listener EnviarCorreoBienvenida --event=UsuarioRegistrado
  

Esto genera app/Listeners/EnviarCorreoBienvenida.php:


namespace App\Listeners;

use App\Events\UsuarioRegistrado;
use Mail;
use App\Mail\CorreoBienvenida;

class EnviarCorreoBienvenida
{
    public function handle(UsuarioRegistrado $event)
    {
        Mail::to($event->usuario->email)
            ->send(new CorreoBienvenida($event->usuario));
    }
}
  

⚙️ Registrar Eventos y Listeners

En el archivo app/Providers/EventServiceProvider.php:


protected $listen = [
    \App\Events\UsuarioRegistrado::class => [
        \App\Listeners\EnviarCorreoBienvenida::class,
    ],
];
  

🚀 Disparar un Evento

Cuando un usuario se registra, podemos disparar el evento:


use App\Events\UsuarioRegistrado;

public function registrar(Request $request)
{
    $usuario = User::create($request->all());
    event(new UsuarioRegistrado($usuario));

    return redirect()->back()->with('success', 'Usuario registrado correctamente.');
}
  

💬 Ejemplo visual interactivo

A continuación verás una simulación de cómo funciona el sistema de eventos y listeners. Al presionar el botón, se dispara un evento de registro y el listener muestra una notificación de bienvenida.

🎧 Simulador de Evento y Listener

Presiona el botón para simular el registro de un nuevo usuario:

📦 Ventajas de usar Eventos y Listeners

  • Desacoplan la lógica del código principal.
  • Facilitan la reutilización y mantenibilidad.
  • Permiten manejar acciones múltiples a partir de un solo evento.
  • Se integran con colas (Jobs) para procesamiento asíncrono.

📚 Ejemplo de varios listeners para un mismo evento


protected $listen = [
    \App\Events\UsuarioRegistrado::class => [
        \App\Listeners\EnviarCorreoBienvenida::class,
        \App\Listeners\RegistrarActividad::class,
        \App\Listeners\AsignarRolInicial::class,
    ],
];
  
💡 Consejo: puedes combinar eventos con colas para ejecutar listeners de forma asíncrona y mejorar el rendimiento.

📋 En resumen:

  • Evento: algo que ocurre en el sistema (por ejemplo, “Usuario registrado”).
  • Listener: reacciona al evento (por ejemplo, enviar correo).
  • Usa event() para disparar eventos.
  • Laravel maneja todo el enlace entre ellos automáticamente.

Publicar un comentario

0 Comentarios