Files
SealShare/.claude/skills/laravel-best-practices/rules/events-notifications.md
T
Andreas Reinhold / reiniandClaude Opus 5 92b3b3de56 Regenerate Boost guidelines and skills
Generated by boost:update for Boost 2.8, which replaces the pest-testing
skill with testing-best-practices and adds infer-conventions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017XYnWFt9pJEwvAmNFN38XD
2026-09-10 10:42:22 +02:00

2.5 KiB

Events and Notifications Best Practices

Rely on Event Discovery

Laravel discovers listeners in the configured listener directories by inspecting type-hinted event arguments on handle() or __invoke() methods. Register listeners manually only when discovery is disabled, the listener is outside those directories, or explicit registration is clearer.

Cache Event Discovery During Production Deployment

Cache discovered listeners during production deployment with php artisan optimize or php artisan event:cache. Rebuild the cache whenever listener definitions change.

Use ShouldDispatchAfterCommit Inside Transactions

When an event is dispatched inside a database transaction, ShouldDispatchAfterCommit delays dispatch until all open database transactions commit. If a transaction rolls back, Laravel discards the event. This affects synchronous and queued listeners; it is not limited to queue timing.

class OrderShipped implements ShouldDispatchAfterCommit {}

Queue Slow Notifications

Queue notifications that call external services, such as email, text messaging, or Slack, when they do not need to complete before the response. Keep a notification synchronous when immediate completion or failure feedback is part of the operation.

class InvoicePaid extends Notification implements ShouldQueue
{
    use Queueable;
}

Dispatch Queued Notifications After Commit

A queued notification sent inside a database transaction can run before the transaction commits. Call afterCommit() on the queued notification, or enable the queue connection's after_commit option, when its delivery depends on committed data. This setting has no scheduling effect on a synchronous notification.

$user->notify((new InvoicePaid($invoice))->afterCommit());

Route Notification Channels to Dedicated Queues

Different notification channels can have different latency and priority requirements. Implement viaQueues() when channels should use separate queues.

Use On-Demand Notifications for Non-User Recipients

Avoid creating dummy models to send notifications to arbitrary addresses.

Notification::route('mail', 'admin@example.com')->notify(new SystemAlert());

Implement HasLocalePreference on Notifiable Models

Implement HasLocalePreference::preferredLocale() on a notifiable model when notifications and mailables should use the recipient's locale. Laravel also preserves that locale for queued delivery. An explicit locale() call can still override the preference for an individual notification.