Observers let you hook into your model's lifecycle events to run custom logic whenever a record is created, updated, deleted, restored, or force-deleted.
Get StartedUse the CLI command to generate an observer class:
php cli make:observer User
This creates app/Observers/UserObserver.php:
namespace App\Observers;
use Simple\Model;
class UserObserver
{
public function created(User $user)
{
// Send welcome email
}
public function updated(User $user)
{
// Log changes
}
public function deleted(User $user)
{
// Clean up related data
}
public function restored(User $user)
{
// Re-index search
}
public function forceDeleted(User $user)
{
// Permanently removed
}
}
Each observer method receives the model instance as its only argument:
| Method | Fires When |
|---|---|
created |
A new record is inserted into the database |
updated |
An existing record's attributes are changed and saved |
deleted |
A record is deleted (soft deletes included) |
restored |
A soft-deleted record is restored |
forceDeleted |
A record is permanently force-deleted |
Observers must be registered in app/Providers/EventServiceProvider.php inside the boot() method:
namespace App\Providers;
use App\Observers\UserObserver;
use App\Models\User;
class EventServiceProvider
{
public function boot()
{
User::observe(UserObserver::class);
}
}
The framework automatically calls EventServiceProvider::boot() on every request, so your observer is active immediately.
Send a welcome email after a user signs up:
// app/Observers/UserObserver.php
namespace App\Observers;
use App\Models\User;
use Simple\Mail;
class UserObserver
{
public function created(User $user)
{
$subject = 'Welcome to our platform!';
$message = "Hi {$user->name}, thanks for joining!";
Mail::send($user->email, $subject, $message);
}
public function updated(User $user)
{
if ($user->wasChanged('email')) {
// Send email verification
}
}
}
The observer system is built on Laravel's Eloquent ORM, which is included with the framework:
Simple\Database\Connection wires up Illuminate\Events\Dispatcher when the database connectsModel::observe() method registers the observer for the given model's lifecycle eventsSimple\Request automatically boots EventServiceProvider on each request