PHP
Automating Actions with Eloquent Model Observers
Learn to use Eloquent Observers to centralize and manage model lifecycle events like creating, updating, or deleting, keeping your controllers clean and organized in Laravel.
<?php
namespace App\Observers;
use App\Models\User;
class UserObserver
{
/**
* Handle the User "creating" event.
*
* @param \App\Models\User $user
* @return void
*/
public function creating(User $user)
{
// Automatically hash password before user is created
if (isset($user->password)) {
$user->password = bcrypt($user->password);
}
}
/**
* Handle the User "deleted" event.
*
* @param \App\Models\User $user
* @return void
*/
public function deleted(User $user)
{
// Log user deletion or send notification
// Log::info("User {$user->id} deleted.");
}
}
// In AppServiceProvider.php (or a dedicated ObserverServiceProvider):
// use App\Models\User;
// use App\Observers\UserObserver;
// public function boot()
// {
// User::observe(UserObserver::class);
// }
How it works: Eloquent Observers provide a clean and centralized way to listen for and respond to model lifecycle events (e.g., `creating`, `created`, `updating`, `updated`, `deleting`, `deleted`). Instead of placing logic directly in the model or controller, an Observer class encapsulates the reactions to these events. This snippet shows how to hash a user's password automatically before creation and how to handle the `deleted` event, promoting separation of concerns and maintainable code.