当神不再是我们的信仰,那么信仰自己吧,努力让自己变好,不辜负自己的信仰!

Laravel 模型事件的应用

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


Laravel 在模型事件中处理起来很方便:https://laravel-china.org/docs/laravel/5.5/eloquent#events


Laravel 的模型事件有两种方式,
* 设置dispatchesEvents属性映射事件类
* 使用观察器来注册事件,这里介绍第二种

  • 新建模型
    php artisan make:model Log

  • 创建迁移表:
    php artisan make:migration create_logs_table
  • 表的结构大概是这样,可按需设计

  • 运行迁移生成表
    php artisan migrate
  • 新建一个服务提供者统一注册所有的模型事件观察器(后面的名字可以自己起得形象一点)
    php artisan make:provider ObserverLogServiceProvider
  • /config/app.php中的providers数组注册(大概如图中)
    《Laravel 模型事件的应用》
  • app目录下新建文件夹Observers存放模型观察器,并新建基类LogBaseServer并在构造函数构建基本属性(CLI是因为在命令行执行时不存在用户执行)
    《Laravel 模型事件的应用》
  • 新建一个观察器继承基类LogBaseServerUser模型,方法的名字要对应文档中的事件)
    《Laravel 模型事件的应用》
  • 到新建的服务提供者ObserverLogServiceProvider中运行
    《Laravel 模型事件的应用》
  • 为需要的模型注册事件(我这挺多的,之后大概长这样)
    《Laravel 模型事件的应用》
  • 然后我们触发一些事件(增删改,表的数据就有了)
    《Laravel 模型事件的应用》

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

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

END

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注