PHP
Automating Business Logic with Eloquent Model Observers
Use Laravel Eloquent Model Observers to centralize and manage event-driven logic for model lifecycle events like creating, updating, or deleting.
// Create an Observer:
// php artisan make:observer UserObserver --model=User
// app/Observers/UserObserver.php
namespace App\Observers;
use App\Models\User;
use Illuminate\Support\Facades\Log;
// use Illuminate\Support\Facades\Mail;
// use App\Mail\WelcomeEmail;
// use Illuminate\Support\Facades\Storage;
class UserObserver
{
public function creating(User $user)
{
// Set a default value or perform validation before creation
if (empty($user->status)) {
$user->status = 'active';
}
}
public function created(User $user)
{
// Log user creation or send a welcome email
Log::info("User {$user->id} created.");
// Mail::to($user->email)->send(new WelcomeEmail($user));
}
public function updating(User $user)
{
// Log changes before they are saved
if ($user->isDirty('email')) {
Log::info("User {$user->id} email is changing from {$user->getOriginal('email')} to {$user->email}.");
}
}
public function deleted(User $user)
{
// Clean up related resources after deletion
// Storage::deleteDirectory("users/{$user->id}");
Log::warning("User {$user->id} deleted.");
}
}
// Register the Observer (e.g., in AppServiceProvider.php's boot method):
// app/Providers/AppServiceProvider.php
namespace App\Providers;
use App\Models\User;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
User::observe(UserObserver::class);
}
}
// Example Usage (the observer automatically runs):
$user = User::create(['name' => 'John Doe', 'email' => '[email protected]']); // `creating` and `created` run
$user->email = '[email protected]';
$user->save(); // `updating` and `updated` run
$user->delete(); // `deleting` and `deleted` run
How it works: This snippet demonstrates Laravel Eloquent Model Observers, a powerful way to centralize event-driven logic for model lifecycle events. An observer is a class with methods corresponding to various model events (e.g., `creating`, `created`, `updating`, `updated`, `deleting`, `deleted`). When a model like `User` triggers an event, the corresponding observer method is automatically executed, allowing you to perform tasks such as setting default values, logging changes, sending notifications, or cleaning up related resources. Observers are registered using the `observe()` method, typically within a service provider's `boot()` method.