Skip to content

Event Methods

MethodDescription
->on($event, $listener)Register event listener
->emit($event, $payload)Emit event to all listeners
->hasListeners($event)Check if event has listeners

Use dot notation for namespacing:

  • user.created, user.updated, user.deleted
  • order.completed, order.refunded
  • payment.succeeded, payment.failed
app()->on('user.created', fn($payload) => sendEmail($payload['user']));
app()->on('user.created', SendWelcomeEmail::class);

Class is resolved through the container with dependency injection.

class SendWelcomeEmail
{
public function __construct(private EmailService $emails) {}
public function __invoke(array $payload): void
{
$this->emails->send($payload['user']['email'], 'Welcome!');
}
}
PatternMatches
user.*user.created, user.updated, user.deleted
*All events
app()
->on('user.created', SendWelcomeEmail::class)
->on('user.created', UpdateAnalytics::class)
->on('user.created', LogUserCreation::class);
app()->on('user.*', fn($payload) => logUserEvent($payload));
app()->on('*', fn($payload) => logAllEvents($payload));
if (app()->hasListeners('order.completed')) {
app()->emit('order.completed', ['order' => $order]);
}
app()->emit('payment.succeeded', [
'amount' => 99.99,
'currency' => 'USD',
'customer_id' => 123,
'timestamp' => time()
]);