1.6 KiB
Events & Notifications Best Practices
Rely on Event Discovery
Laravel auto-discovers listeners by reading handle(EventType $event) type-hints. No manual registration needed in AppServiceProvider.
Run event:cache in Production Deploy
Event discovery scans the filesystem per-request in dev. Cache it in production: php artisan optimize or php artisan event:cache.
Use ShouldDispatchAfterCommit Inside Transactions
Without it, a queued listener may process before the DB transaction commits, reading data that doesn't exist yet.
class OrderShipped implements ShouldDispatchAfterCommit {}
Always Queue Notifications
Notifications often hit external APIs (email, SMS, Slack). Without ShouldQueue, they block the HTTP response.
class InvoicePaid extends Notification implements ShouldQueue
{
use Queueable;
}
Use afterCommit() on Notifications in Transactions
Same race condition as events — the queued notification job may run before the transaction commits.
Route Notification Channels to Dedicated Queues
Mail and database notifications have different priorities. Use viaQueues() to route them to 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
Laravel automatically uses the user's preferred locale for all notifications and mailables — no per-call locale() needed.