Reference
Events and Listeners
Events let you separate side effects from the main action. The starter kit uses a small event bus and an event service provider to wire listeners in one place.
Quick Example
// app/Providers/EventServiceProvider.js
export default class EventServiceProvider {
static get listen() {
return {
UserRegistered: [SendWelcomeEmail],
};
}
}
Explanation
When a new user registers, AuthService fires a UserRegistered event. EventServiceProvider connects that event to one or more listeners, and each listener handles a side effect such as dispatching a job.
This keeps registration logic small and makes side effects easier to grow later.
Additional Examples
Define an event:
export default class UserRegistered {
constructor(user) {
this.user = user;
this.timestamp = new Date();
}
}
Listen for it:
import SendWelcomeEmailJob from "../Jobs/SendWelcomeEmailJob.js";
export default class SendWelcomeEmail {
async handle(event) {
await SendWelcomeEmailJob.dispatch({ user: event.user });
}
}
Fire it:
eventBus.fire(new UserRegistered(safeUser));
Advanced Usage
Events are a good fit for notifications, analytics, audit logs, and background work. If the action must happen before the response finishes, keep it in the service instead of an async listener.
Notes / Tips
- Keep event objects small.
- Name events after something that already happened.
- Let listeners own side effects, not the controller.