在日常处理一些用户操作事件时,我们有时候需要记录下来,方便以后查阅,或者大数据统计。


Laravel 在模型事件中处理起来很方便:laravel-china.org/docs/larave…


Laravel 的模型事件有两种方式,

  • 设置dispatchesEvents属性映射事件类

  • 使用观察器来注册事件,这里介绍第二种

  • 新建模型 php artisan make:model Log

<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Log extends Model
{protected $fillable = ['user_name', 'user_id', 'url', 'event', 'method', 'table', 'description'];
}复制代码
  • 创建迁移表: php artisan make:migration create_logs_table
  • 表的结构大概是这样,可按需设计
<?phpuse Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;class CreateLogsTable extends Migration
{/*** Run the migrations.** @return void*/public function up(){Schema::create('logs', function (Blueprint $table) {$table->engine = 'InnoDB';$table->increments('id');$table->string('user_id')->comment('操作人的ID');$table->string('user_name')->comment('操作人的名字,方便直接查阅');$table->string('url')->comment('当前操作的URL');$table->string('method')->comment('当前操作的请求方法');$table->string('event')->comment('当前操作的事件,create,update,delete');$table->string('table')->comment('操作的表');$table->string('description')->default('');$table->timestamps();});DB::statement("ALTER TABLE `logs` comment '操作日志表'");}/*** Reverse the migrations.** @return void*/public function down(){Schema::dropIfExists('logs');}
}
复制代码
  • 运行迁移生成表 php artisan migrate
  • 新建一个服务提供者统一注册所有的模型事件观察器(后面的名字可以自己起得形象一点) php artisan make:provider ObserverLogServiceProvider
  • /config/app.php中的providers数组注册(大概如图中)
  • app目录下新建文件夹Observers存放模型观察器,并新建基类LogBaseServer并在构造函数构建基本属性(CLI是因为在命令行执行时不存在用户执行)
  • 新建一个观察器继承基类LogBaseServerUser模型,方法的名字要对应文档中的事件)
  • 到新建的服务提供者ObserverLogServiceProvider中运行
  • 为需要的模型注册事件(我这挺多的,之后大概长这样)
  • 然后我们触发一些事件(增删改,表的数据就有了)

  • 多对多的关联插入不会出触发模型(比如attach方法)
  • 这时候就需要自己新建事件类来模拟(这里拿分配权限给角色粗略说一下)
  1. EventServiceProvider中的listen属性绑定好事件
  2. 事件PermissionRoleEvent中的注入两个参数,一个是角色,另一个是attach或者detach返回的数组
  3. 事件监听器PermissionRoleEventLog也继承基类LogBaseServer,这里就是根据传入的数组id遍历,然后创建日志
  4. 之后应用事件

  • 更优雅的处理登录注销事件
  1. EventServiceProvider中的subscribe属性绑定好处理的类
  2. 事件监听类的方法
  3. 之后的效果就是这样了:

END

原文地址

Laravel 模型事件的应用相关推荐

  1. laravel 模型事件几种用法

    一 .简单粗鲁(用于本地测试) 路由中定义: Event::listen('eloquent.updated: App\Post',function (){dump('测试一下修改事件'); }); ...

  2. 安卓中radiobutton不进入监听事件_Laravel模型事件的实现原理详解

    模型事件在 Laravel 的世界中,你对 Eloquent 大多数操作都会或多或少的触发一些模型事件,下面这篇文章主要给大家介绍了关于Laravel模型事件的实现原理,文中通过示例代码介绍的非常详细 ...

  3. cordova监听事件中调用其他方法_Laravel模型事件的实现原理详解

    模型事件在 Laravel 的世界中,你对 Eloquent 大多数操作都会或多或少的触发一些模型事件,下面这篇文章主要给大家介绍了关于Laravel模型事件的实现原理,文中通过示例代码介绍的非常详细 ...

  4. php 数据透视表,php – 使用Laravel模型过滤数据透视表数据

    假设我有三个表(这只是一个例子): users user_id username roles role_id name user_roles user_id role_id primary (bool ...

  5. 语句作用_3分钟短文:Laravel模型作用域,为你“节省”更多代码

    引言 原则上代码写一次,处处是引用,不需要大量的冗余代码,这是一种趋势,也是提高代码健壮性的努力方向. laravel模型为我们提供了一层数据库操作层,将数据交互独立出来. 但是久而久之,随着项目的需 ...

  6. php一对一模型关联,通过实例学习Laravel模型中的一对一关联关系

    通过实例学习Laravel模型中的一对一关联关系 一.前言 Laravel遵循[约定优于配置]的原则.PHP开发者只需要遵循Laravel框架的原则,就能减少大量的工作,这便是Laravel的魅力之一 ...

  7. thinkph6模型事件

    模型事件 首先,从手册上,我们可以知道模型支持以下事件: 事件 描述 事件方法名after_read 查询后 onAfterRead before_insert 新增前 onBeforeInsert ...

  8. Laravel 的事件广播系统(Redis驱动)

    需求 给当前在线浏览用户推送优惠券,或者刺激用户消费的话术 今天我们主要是借助Laravel Broadcasting你可以使用上时下很热的Websocket技术 解决方案 1 . 基于laravel ...

  9. tp3 php钩子函数,thinkphp模型事件(钩子函数:模型中在增删改等操作前后自动执行的事件)...

    thinkphp模型事件(钩子函数:模型中在增删改等操作前后自动执行的事件) 一.总结 1.通过模型事件(钩子函数),可以在插入更新删除等前后执行一些特定的功能 2.模型事件是写在模型里面的,控制器中 ...

  10. tp6取消了模型的自动完成,可使用模型事件代替

    记录:tp6模型的自动完成功能已经取消,请使用模型事件代替. tp5版本时可使用框架的自动完成功能,示例: 模型文件:model/User.php //数据自动完成指在不需要手动赋值的情况下对字段的值 ...

最新文章

  1. jittor和pytorch生成网络对比之bggan
  2. jeecg智能开发平台参与-2013年度中国优秀开源项目评比
  3. rsync的配置应用
  4. Learn About Salesforce Flow for Service
  5. 文献学习(part17)--Correlation Adaptive Subspace Segmentation by Trace Lasso
  6. 一键安装zabbix percona mysql插件监控mysql
  7. 列表视图案例2——显示用户列表
  8. mqtt服务器收不到设备信息,在我的终端(mosquitto)上显示来自mqtt服务器的json消息...
  9. redis系列-redis的持久化
  10. L1-062 幸运彩票 (15 分)
  11. Ubuntu18.04系统中python3.7安装MultiNEAT库
  12. 单片机步进电机正反转C语言程序,单片机控制步进电机正反转
  13. Helix QAC所提供的四种抑制方式
  14. java实现上传寸照并剪裁,给寸照换背景_用java处置图片(jpg,png,gif.)的背景颜色
  15. php邮件群发系统日发5000,最新qq邮件群发日发10000封邮件
  16. EC修炼之道—代码架构
  17. Windows:通过GPO部署iTunes for Windows
  18. 谷歌PR风采依旧 推动网络推广产业链
  19. Java 逆波兰表达式完成计算器
  20. 精益生产的定义和特征解读

热门文章

  1. ARC_xp_20160526
  2. Mac - 让NSView快捷的实现阴影效果
  3. .net Remoting与Web Service的比较
  4. JavaScript学习笔记(八)
  5. Linux学习笔记之查看Linux版本信息
  6. 洛谷P1219 八皇后 题解
  7. 使用re-sign.jar对apk进行重签名
  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用...
  9. python的Singleton模式实现
  10. 导出csv文件,导出axlsx文件。gem 'Axlsx-Rails' (470);导入csv文件。