PHP
React to Model Changes with Events & Observers
Execute custom logic automatically when Eloquent models are created, updated, or deleted using model events or dedicated observers for clean separation of concerns.
// Using a Model Event Listener (e.g., in App\Providers\EventServiceProvider.php)
// protected $listen = [
// 'App\Events\UserCreated' => [
// 'App\Listeners\SendWelcomeEmail',
// ],
// ];
// Using an Observer (e.g., created using `php artisan make:observer UserObserver --model=User`)
// 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
\Log::info('New user created: ' . $user->email);
// e.g., Send welcome email, log activity
}
public function updating(User $user)
{
// Logic to run BEFORE a User is updated
if ($user->isDirty('email')) {
\Log::info('User email is being changed for: ' . $user->id);
}
}
// Other methods: retrieved, creating, updated, saving, saved, deleting, deleted, restoring, restored, forceDeleting, forceDeleted
}
// Registering the Observer (e.g., in App\Providers\AppServiceProvider.php's boot method)
// use App\Models\User;
// use App\Observers\UserObserver;
// User::observe(UserObserver::class);
How it works: Laravel Eloquent models dispatch several events when they are created, updated, deleted, or retrieved. You can hook into these events using event listeners or, more cleanly, with model observers. Observers are dedicated classes that group all event handling logic for a specific model (e.g., `UserObserver` handles `created`, `updated`, `deleted` events for the `User` model), promoting better organization and separation of concerns than inline event listeners for models.