Fire Events and handle them in Listeners — decouple side effects and process them via queue.
Events and Listeners
php artisan make:event UserRegistered
php artisan make:listener SendWelcomeEmail --event=UserRegistered
class UserRegistered {
public function __construct(public User $user) {}
}
class SendWelcomeEmail implements ShouldQueue {
public function handle(UserRegistered $event): void {
Mail::to($event->user)->send(new WelcomeEmail());
}
}
// Register in EventServiceProvider (or auto-discovery)
// app/Providers/EventServiceProvider.php
protected $listen = [
UserRegistered::class => [
SendWelcomeEmail::class,
CreateUserProfile::class,
],
];
// Fire event
event(new UserRegistered($user));
UserRegistered::dispatch($user);