Events & Listeners
Event-Driven Architecture
Events and listeners help decouple business logic and improve maintainability. Use events for actions like user registration, order placement, or notifications.
- Fire events from controllers, services, or models when important actions occur.
- Listen for events to trigger side effects (e.g., sending emails, logging activity).
Example:
// Fire an event
UserRegistered::dispatch($user);
Naming Conventions
- Name events using past tense (e.g.,
UserRegistered,OrderPlaced). - Name listeners using action verbs (e.g.,
SendWelcomeEmail,LogOrderActivity). - Use PascalCase for class names.
Organization
- Store events in
app/Events. - Store listeners in
app/Listeners. - Register events and listeners in
EventServiceProvider.
Example:
// Event
class UserRegistered implements ShouldBroadcast {
public $user;
public function __construct(User $user) {
$this->user = $user;
}
}
// Listener
class SendWelcomeEmail {
public function handle(UserRegistered $event) {
Mail::to($event->user->email)->send(new WelcomeMail($event->user));
}
}
Best Practices
- Use events for side effects, not for core business logic.
- Keep listeners focused and single-purpose.
- Document event and listener responsibilities with PHPDoc.
- Test event dispatching and listener behavior.
Example: Registering Events
// app/Providers/EventServiceProvider.php
protected $listen = [
UserRegistered::class => [
SendWelcomeEmail::class,
LogUserRegistration::class,
],
];