Listeners
Los Listeners contienen la logica que se ejecuta cuando se despacha un evento. Un solo evento puede tener multiples listeners que se ejecutan secuencialmente.
Crear un listener
php artisan make:listener SendWelcomeEmail --event=UserRegistered
class SendWelcomeEmail implements ShouldQueue
{
public function handle(UserRegistered $event): void
{
Mail::to($event->user->email)->send(
new WelcomeMail($event->user)
);
}
public function failed(UserRegistered $event, Throwable $exception): void
{
Log::error('Error enviando email de bienvenida', [
'user_id' => $event->user->id,
'error' => $exception->getMessage(),
]);
}
}
Listeners en cola
Implementando ShouldQueue, el listener se procesa de forma asincrona en una cola de trabajo, sin bloquear la peticion HTTP.
class UpdateSearchIndex implements ShouldQueue
{
public $queue = 'indexing';
public $delay = 60; // segundos
public function handle(PostPublished $event): void
{
SearchIndex::update($event->post);
}
public function shouldQueue(PostPublished $event): bool
{
return $event->post->published;
}
}
Los listeners permiten separar la responsabilidad de las acciones secundarias, manteniendo la logica principal limpia y enfocada. Combinados con colas, mejoran significativamente el rendimiento de la aplicacion.