Concept Flow - Event dispatching
Trigger Event in Code
Create Event Object
Dispatch Event
Listeners React
Perform Actions
Finish Event Cycle
This flow shows how Laravel creates and dispatches an event, then listeners respond to it.
Jump into concepts and practice - no test required
event(new UserRegistered($user));
class UserRegistered {
public $user;
public function __construct($user) {
$this->user = $user;
}
}| Step | Action | Event Object State | Listeners Called | Result |
|---|---|---|---|---|
| 1 | Create UserRegistered event with user data | UserRegistered { user: UserObject } | None yet | Event object ready |
| 2 | Dispatch event using event() helper | UserRegistered { user: UserObject } | Listener1, Listener2 | Listeners start processing |
| 3 | Listener1 handles event | UserRegistered { user: UserObject } | Listener2 pending | Listener1 sends welcome email |
| 4 | Listener2 handles event | UserRegistered { user: UserObject } | None | Listener2 logs registration |
| 5 | Event dispatch cycle ends | UserRegistered { user: UserObject } | None | All listeners done |
| Variable | Start | After Step 1 | After Step 2 | After Step 5 |
|---|---|---|---|---|
| eventObject | null | UserRegistered { user: UserObject } | UserRegistered { user: UserObject } | UserRegistered { user: UserObject } |
| listenersCalled | [] | [] | [Listener1, Listener2] | [Listener1, Listener2] |
Laravel Event Dispatching: - Create an event class with data. - Dispatch event using event(new EventClass(data)). - Laravel calls all registered listeners. - Listeners perform actions like sending emails. - Event cycle ends after all listeners run.
UserRegistered with a user object $user?event() helper with a new event instance.event(new UserRegistered($user)); matches Laravel's pattern.class OrderPlaced {
public $orderId;
public function __construct($orderId) {
$this->orderId = $orderId;
}
}
// Dispatch event
event(new OrderPlaced(123));
// Listener logs the order ID
Log::info('Order placed with ID: ' . 123);OrderPlaced is dispatched with order ID 123, and the listener logs this ID.event(UserRegistered($user));
new.UserRegistered($user) like a function, missing new.ProfileUpdated only if the user's email has changed. Which code correctly implements this conditional event dispatch?isDirty('email') method checks if the email attribute changed.