Laravel Events permitem implementar uma arquitetura desacoplada, onde diferentes partes do sistema podem reagir a ações específicas, como o cadastro de um usuário ou a conclusão de um pedido. Com suporte nativo a listeners, filas assíncronas e até broadcast em tempo real, os eventos tornam o código mais organizado, escalável e fácil de manter.
O que são Events no Laravel?
Em aplicações modernas, eventos representam ações que acabaram de acontecer e podem ser observadas por outras partes do sistema. O Laravel oferece um sistema de eventos e listeners robusto, permitindo desacoplamento, escalabilidade e reatividade da aplicação.
Exemplo prático:
Quando um novo usuário se registra, você pode emitir um evento UserRegistered. Esse evento pode acionar múltiplos listeners, como:
- Enviar e-mail de boas-vindas.
- Criar um perfil padrão.
- Notificar o administrador.
Benefícios de Usar Eventos no Laravel
- ✅ Código mais limpo e desacoplado.
- ✅ Fácil de manter e escalar.
- ✅ Execução assíncrona com filas (queues).
- ✅ Centralização da lógica de resposta a ações importantes.
Estrutura Padrão de Eventos
Os eventos e listeners ficam, por padrão, nestes diretórios:
app/
├── Events/
│ └── UserRegistered.php
├── Listeners/
│ └── SendWelcomeEmail.php
Como Criar um Evento no Laravel
Use o comando Artisan:
php artisan make:event UserRegistered
Isso criará a classe em app/Events/UserRegistered.php:
namespace App\Events;
use App\Models\User;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class UserRegistered
{
use Dispatchable, SerializesModels;
public function __construct(public User $user) {}
}
✅ A propriedade User $user será usada pelos listeners.
Criando um Listener
php artisan make:listener SendWelcomeEmail --event=UserRegistered
namespace App\Listeners;
use App\Events\UserRegistered;
use App\Mail\WelcomeMail;
use Illuminate\Support\Facades\Mail;
class SendWelcomeEmail
{
public function handle(UserRegistered $event): void
{
Mail::to($event->user->email)->send(new WelcomeMail($event->user));
}
}
Registrando o Evento no
EventServiceProvider
Em app/Providers/EventServiceProvider.php:
protected $listen = [
\App\Events\UserRegistered::class => [
\App\Listeners\SendWelcomeEmail::class,
],
];
Disparando um Evento
Você pode disparar o evento em qualquer lugar da aplicação:
event(new UserRegistered($user));
Usando Eventos com Queues (Assíncronos)
Para listeners que devem ser processados em segundo plano (ex: envio de e-mail), basta implementar a interface ShouldQueue:
use Illuminate\Contracts\Queue\ShouldQueue;
class SendWelcomeEmail implements ShouldQueue
{
public function handle(UserRegistered $event)
{
// Processamento assíncrono
}
}
Importante: configure e rode a fila com:
php artisan queue:work
Event Broadcasting (Eventos em Tempo Real)
O Laravel também permite transmitir eventos em tempo real com WebSockets via Laravel Echo.
Exemplo:
php artisan make:event NewMessageSent
Na classe do evento:
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class NewMessageSent implements ShouldBroadcast
{
use InteractsWithSockets;
public function __construct(public $message) {}
public function broadcastOn()
{
return ['chat-channel'];
}
}
Boas Práticas com Laravel Events
✅ Nomeie os eventos com verbos no passado: OrderShipped, InvoicePaid, UserBanned.
✅ Listeners devem ser focados em uma responsabilidade clara.
✅ Para tarefas demoradas, sempre utilize fila (ShouldQueue).
✅ Agrupe seus eventos por domínio para manter organização.
✅ Use eventos para integrações externas, como enviar dados para CRMs ou ERPs.
Exemplo Real: Evento para Envio de Cupom Pós-Cadastro
php artisan make:event NewClientCreated
php artisan make:listener SendDiscountCoupon --event=NewClientCreated
No Listener:
class SendDiscountCoupon implements ShouldQueue
{
public function handle(NewClientCreated $event)
{
$event->client->coupons()->create([
'code' => Str::random(10),
'discount' => 15,
]);
}
}
Quando Usar (e Não Usar) Eventos
Use eventos quando:
- Você precisa notificar múltiplas partes do sistema sobre uma ação.
- A tarefa pode ser desacoplada do fluxo principal.
- Deseja escalar e distribuir melhor as responsabilidades.
Evite eventos quando:
- A lógica depende fortemente da ordem de execução.
- A ação precisa de uma resposta imediata no fluxo do usuário.
Conclusão
O sistema de eventos do Laravel é um dos maiores aliados de quem deseja criar sistemas desacoplados, performáticos e escaláveis.
Se usados corretamente, os eventos ajudam a manter o código limpo e pronto para crescer — seja você integrando com APIs externas, enviando e-mails, notificações, processando jobs ou trabalhando com filas.
Pingback: Estrutura de Pastas Laravel: Guia Completo para Desenvolvedores Iniciantes - Devs Brasil - Dicas para devs