首页 > 技术文章 > laravel观察器(监听事件)

jurij 2021-01-26 19:44 原文

laravel观察器(监听事件)

应用:不需要在原来控制器添加成功后写代码,我们在自定义的事件观察类中对应的生命周期方法中写对应的功能。

1、使用artisan命令来添加模型观察事件

# 此命令是laravel5.7之后才有的(包含5.7),之前想要有此功能,手动创建目录和文件
php artisan make:observer RoleObserver -m Models/Role

image-20210116113054168

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);
    }
}

image-20210126191001052

  • 2、服务提供者

image-20210126191229854

上述完成后就可以使用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'=>'添加失败'];
}

image-20210126193110631

  • 监听器中写日志的代码

允许你挂接到模型生命周期的如下节点: retrievedcreatingcreatedupdatingupdatedsavingsaveddeletingdeletedrestoringrestored。事件允许你每当特定模型保存或更新数据库时执行代码。每个事件通过其构造器接受模型实例。

retrieved 事件在现有模型从数据库中查找数据时触发。当新模型每一次保存时,creatingcreated 事件被触发。如果数据库中已经存在模型并且调用了 save 方法,updating / updated 事件被触发。这些情况下,saving / saved 事件也被触发。

注意:通过 Eloquent 进行批量更新时,被更新模型的 savedupdated 事件不会被触发。这是因为批量更新时,并没有真的获取模型。

 public function created(Role $role)
 {
     \Log::info('创建了一个角色');
 }

image-20210126193330018

  • 效果

image-20210126193632241

好了,介绍到这里就结束了,有什么需要的可以在下方评论中联系作者。

推荐阅读