PHP
Manage Model Lifecycle Events with Eloquent Observers
Organize and centralize event-driven logic for Eloquent models using dedicated Observer classes, improving code structure and maintainability.
<?php
namespace App\Observers;
use App\Models\User;
use Illuminate\Support\Facades\Mail;
class UserObserver
{
/**
* Handle the User 'created' event.
*/
public function created(User $user): void
{
// For example, send a welcome email
// Mail::to($user->email)->send(new WelcomeEmail($user));
logger()->info('User ' . $user->id . ' created.');
}
/**
* Handle the User 'updated' event.
*/
public function updated(User $user): void
{
// For example, log changes to a separate audit trail
logger()->info('User ' . $user->id . ' updated. Changed attributes: ' . json_encode($user->getChanges()));
}
/**
* Handle the User 'deleted' event.
*/
public function deleted(User $user): void
{
// For example, clean up related resources (e.g., delete their profile)
// $user->profile->delete();
logger()->info('User ' . $user->id . ' deleted.');
}
/**
* Handle the User 'restored' event (for soft deletes).
*/
public function restored(User $user): void
{
logger()->info('User ' . $user->id . ' restored.');
}
/**
* Handle the User 'forceDeleted' event (for soft deletes).
*/
public function forceDeleted(User $user): void
{
logger()->info('User ' . $user->id . ' force deleted.');
}
}
// Register the observer in App\Providers\EventServiceProvider.php:
// protected $observers = [
// User::class => [UserObserver::class],
// ];
// Or in a boot method (e.g., in a Service Provider):
// User::observe(UserObserver::class);
// When a User model is created, updated, or deleted, the corresponding
// method in UserObserver will be called, centralizing event logic.
How it works: Eloquent Observers provide a clean and centralized way to manage model lifecycle events (e.g., 'created', 'updated', 'deleted', 'restored'). Instead of cluttering models with event logic, an Observer class holds all event handlers for a specific model, making your code more modular, readable, and easier to maintain. Observers are typically registered in your 'EventServiceProvider'.