laravel观察器(监听事件)
laravel观察器(监听事件)
应用:不需要在原来控制器添加成功后写代码,我们在自定义的事件观察类中对应的生命周期方法中写对应的功能。
1、使用artisan命令来添加模型观察事件
# 此命令是laravel5.7之后才有的(包含5.7),之前想要有此功能,手动创建目录和文件
php artisan make:observer RoleObserver -m Models/Role
2、进行注册(两种方式,任选其一)
- 1、模型层
<?php
namespace App\Models;
use App\Observeers\RoleObserve;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
protected static function boot()
{
parent::boot(); // TODO: Change the autogenerated stub
self::observe(RoleObserve::class);
}
}
- 2、服务提供者
上述完成后就可以使用laravel的观察器了,下面是一个应用实例(我们创建一个角色后会自动生成一个日志),具体如下:
3、应用实例
- 控制器创建角色代码
//数据验证
$this->validate($request,[
'name'=>'required|unique:roles,name'
]);
$post = $request->only(['name']);
$res = Role::create($post);
//正常我们是需要在此处写记录日志,当我们写了laravel观察器,
//在观察器created方法中写上记录日志就会执行
if ($res){
return ['code'=>0,'msg'=>'添加成功'];
}else{
return ['code'=>1,'msg'=>'添加失败'];
}
- 监听器中写日志的代码
允许你挂接到模型生命周期的如下节点: retrieved
、creating
、created
、updating
、updated
、saving
、saved
、deleting
、deleted
、restoring
和 restored
。事件允许你每当特定模型保存或更新数据库时执行代码。每个事件通过其构造器接受模型实例。
retrieved
事件在现有模型从数据库中查找数据时触发。当新模型每一次保存时,creating
和 created
事件被触发。如果数据库中已经存在模型并且调用了 save
方法,updating / updated
事件被触发。这些情况下,saving / saved
事件也被触发。
注意:通过 Eloquent 进行批量更新时,被更新模型的
saved
和updated
事件不会被触发。这是因为批量更新时,并没有真的获取模型。
public function created(Role $role)
{
\Log::info('创建了一个角色');
}
- 效果
好了,介绍到这里就结束了,有什么需要的可以在下方评论中联系作者。