本文目录导读:

是的,Laravel 观察者(Observer)可以监听多个事件,你可以在同一个观察者类中定义多个方法,每个方法对应一个 Eloquent 模型事件。
支持的事件类型
Laravel 观察者支持以下 Eloquent 事件:
retrieved- 查询到模型后creating- 创建前created- 创建后updating- 更新前updated- 更新后saving- 保存前(创建或更新)saved- 保存后(创建或更新)deleting- 删除前deleted- 删除后restoring- 软删除恢复前restored- 软删除恢复后forceDeleted- 强制删除后
示例代码
<?php
namespace App\Observers;
use App\Models\User;
use Illuminate\Support\Facades\Log;
class UserObserver
{
// 创建前
public function creating(User $user)
{
Log::info('正在创建用户', ['email' => $user->email]);
}
// 创建后
public function created(User $user)
{
Log::info('用户创建成功', ['id' => $user->id]);
// 可以在这里执行其他操作,比如发送欢迎邮件
}
// 更新前
public function updating(User $user)
{
Log::info('正在更新用户', ['old_email' => $user->getOriginal('email')]);
}
// 更新后
public function updated(User $user)
{
Log::info('用户更新成功', ['id' => $user->id]);
}
// 删除前
public function deleting(User $user)
{
// 在删除用户之前清理相关数据
$user->posts()->delete();
$user->comments()->delete();
}
// 删除后
public function deleted(User $user)
{
Log::info('用户已删除', ['id' => $user->id]);
}
// 查询后
public function retrieved(User $user)
{
Log::info('查询到用户', ['id' => $user->id]);
}
}
注册观察者
在 AppServiceProvider 的 boot 方法中注册:
<?php
namespace App\Providers;
use App\Models\User;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
// 方式1:注册单个事件
User::observe(UserObserver::class);
// 方式2:使用 observe 方法直接定义多个事件
User::observe([
UserObserver::class,
// 还可以注册其他观察者
]);
}
}
选择性监听事件
如果你只想监听特定事件,不需要为所有事件都定义方法:
class UserObserver
{
// 只监听创建和删除事件
public function created(User $user) { /* ... */ }
public function deleted(User $user) { /* ... */ }
// 不需要为每个事件都写方法
}
使用 Events 属性(Laravel 8.x+)
对于更复杂的场景,可以使用 $events 属性:
class UserObserver
{
// 定义事件映射
public $events = [
'App\Events\UserCreated' => 'handleUserCreated',
'App\Events\UserUpdated' => 'handleUserUpdated',
];
public function handleUserCreated($event)
{
// 处理自定义事件
}
}
观察者非常适合用于将模型相关的业务逻辑分离,使代码更清晰、可维护。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播