PHP
React to Eloquent Model Events with Observers
Implement Model Observers in Laravel to centralize event handling logic for model lifecycle events (created, updated, deleted), promoting cleaner, modular code.
// app/Observers/UserObserver.php
namespace App\Observers;
use App\Models\User;
class UserObserver
{
public function created(User $user)
{
// Logic to run AFTER a User is created
// e.g., send a welcome email, create a related profile record
// Mail::to($user->email)->send(new WelcomeEmail($user));
}
public function updating(User $user)
{
// Logic to run BEFORE a User is updated
// e.g., log changes, prevent certain updates based on conditions
}
public function deleted(User $user)
{
// Logic to run AFTER a User is deleted
// e.g., clean up related records (if not using cascading deletes), notify admins
}
// Other events: creating, updated, saving, saved, restoring, restored, forceDeleted
}
// Register the observer in app/Providers/AppServiceProvider.php (or a dedicated ObserverServiceProvider)
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Models\User;
use App\Observers\UserObserver;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
User::observe(UserObserver::class);
}
}
How it works: Model Observers provide a clean, centralized way to handle events fired by Eloquent models (like `created`, `updated`, `deleted`, `saving`, `retrieved`). Instead of scattering event listeners across multiple files or within the model itself, an observer class encapsulates all event handling logic for a specific model, leading to more organized, maintainable, and reusable code, promoting the Single Responsibility Principle.