PHP
Using Model Observers for Centralized Event Handling in Eloquent
Learn to use Laravel Eloquent Observers to centralize event listeners for models, making your code cleaner and more organized by separating event logic.
<?php
// 1. Create the Observer class (e.g., app/Observers/UserObserver.php)
namespace App\Observers;
use App\Models\User;
class UserObserver
{
/**
* Handle the User "created" event.
*
* @param \App\Models\User $user
* @return void
*/
public function created(User $user): void
{
// Example: Log creation, send welcome email
logger("User {$user->id} ({$user->email}) was created.");
// Mail::to($user->email)->send(new WelcomeEmail($user));
}
/**
* Handle the User "updated" event.
*
* @param \App\Models\User $user
* @return void
*/
public function updated(User $user): void
{
// Example: Log updates, notify admins
logger("User {$user->id} ({$user->email}) was updated.");
}
/**
* Handle the User "deleted" event.
*
* @param \App\Models\User $user
* @return void
*/
public function deleted(User $user): void
{
// Example: Clean up related data, log deletion
logger("User {$user->id} ({$user->email}) was deleted.");
}
// ... and other events like 'saving', 'saved', 'restoring', 'restored', 'forceDeleted'
}
// 2. Register the Observer (e.g., in app/Providers/AppServiceProvider.php)
// Add this inside the boot() method:
// use App\Models\User;
// use App\Observers\UserObserver;
// User::observe(UserObserver::class);
How it works: Eloquent observers provide a clean, centralized way to handle events fired on your models, such as `created`, `updated`, `deleted`, etc. Instead of cluttering your model with event listeners or defining multiple anonymous functions, an observer class groups all event-related logic for a specific model. After creating the observer class with methods corresponding to the events you want to handle, you register it in a service provider (typically `AppServiceProvider`) to activate it.