如果你在给定模型中监听多个事件,可以使用观察者来对所有监听器进行分组,观察者类拥有反射你想要监听的 Eloquent 事件对应的方法名,每个方法接收模型作为唯一参数。Laravel 并没有为观察者提供默认目录,所以你可以创建任意目录来存放观察者类。
<?php
namespace App\Observers;
use App\Models\User;
use Illuminate\Support\Facades\Log;
class UserObserver
{
/**
* 监听用户创建事件.
*
* @param User $user
* @return void
*/
public function created(User $user)
{
//
}
/**
* 监听用户删除事件.
*
* @param User $user
* @return void
*/
public function deleting(User $user)
{
Log::Info('DELETE USER.'.$user->name);
}
}
上面新建的观察者主要是监听用户的行为,我们同时引入门面方法Log来测试使用,你可以有自己的操作,
使用你想要观察模型的 observe
方法 ,我们需要注册它,这里我们使用AppServiceProvider
中注册观察者:
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use App\Observers\UserObserver;
use App\Models\User;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
User::observe(UserObserver::class);
//
}
}
注意上面我们注册时引入:
use App\Observers\UserObserver;
use App\Models\User;
最后当我们删除用户时我们就会在日志中记录删除人的姓名:
[2018-05-23 12:03:26] local.INFO: DELETE USER.xulei