PHP
Centralize Logic with Eloquent Model Observers
Use Laravel Eloquent Model Observers to centralize and manage event-driven logic for model lifecycle events (created, updated, deleted, etc.), ensuring consistency.
namespace App\Observers;
use App\Models\User;
class UserObserver
{
public function creating(User $user)
{
// Automatically set a default status or generate a unique ID before a user is created
if (empty($user->status)) {
$user->status = 'pending';
}
}
public function created(User $user)
{
// Log user creation or send a welcome email after a user is created
\Log::info("User created: " . $user->email);
// \Mail::to($user->email)->send(new WelcomeEmail($user));
}
public function deleting(User $user)
{
// Prevent deletion if the user has active orders
if ($user->orders()->where('status', 'active')->exists()) {
return false; // Prevent deletion
}
}
}
// In your AppServiceProvider (or a dedicated ObserverServiceProvider):
// use App\Models\User;
// use App\Observers\UserObserver;
//
// public function boot()
// {
// User::observe(UserObserver::class);
// }
// Now, these methods will be called automatically when a User model is manipulated:
// $user = User::create(['name' => 'John Doe', 'email' => '[email protected]']);
// $user->delete();
How it works: Model Observers provide a clean way to group event listeners for a model's lifecycle events. This `UserObserver` demonstrates `creating` (before creation), `created` (after creation), and `deleting` (before deletion) events. `creating` can modify the model attributes before saving, `created` can perform actions after saving (like logging or sending emails), and `deleting` can even prevent an action based on conditions. Observers are registered in a service provider, centralizing event-driven logic and keeping your models clean and focused on their core responsibilities.