在日常处理一些用户操作事件时,我们有时候需要记录下来,方便以后查阅,或者大数据统计。
Laravel 在模型事件中处理起来很方便:https://laravel-china.org/docs/laravel/5.5/eloquent#events
Laravel 的模型事件有两种方式,
- 设置
dispatchesEvents
属性映射事件类 - 使用观察器来注册事件,这里介绍第二种
- 新建模型
php artisan make:model Log
<?php namespace 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
- 表的结构大概是这样,可按需设计
<?php use 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是因为在命令行执行时不存在用户执行)
- 新建一个观察器继承基类
LogBaseServer
(User模型,方法的名字要对应文档中的事件)
- 到新建的服务提供者
ObserverLogServiceProvider
中运行
- 为需要的模型注册事件(我这挺多的,之后大概长这样)
- 然后我们触发一些事件(增删改,表的数据就有了)
- 多对多的关联插入不会出触发模型(比如
attach
方法) - 这时候就需要自己新建事件类来模拟(这里拿分配权限给角色粗略说一下)
1.在EventServiceProvider
中的listen
属性绑定好事件
2.事件PermissionRoleEvent
中的注入两个参数,一个是角色,另一个是attach
或者detach
返回的数组
3.事件监听器PermissionRoleEventLog
也继承基类LogBaseServer
,这里就是根据传入的数组id遍历,然后创建日志
4.之后应用事件
- 更优雅的处理登录注销事件
1.在EventServiceProvider
中的subscribe
属性绑定好处理的类
2.事件监听类的方法
3.之后的效果就是这样了:
以上就是详解Laravel模型事件的两种方式的详细内容,更多请关注亿码酷站其它相关文章!
详解Laravel模型事件的两种方式
—–文章转载自PHP中文网如有侵权请联系ymkuzhan@126.com删除
转载请注明来源:详解Laravel模型事件的两种方式
本文永久链接地址:https://www.ymkuzhan.com/35850.html
本文永久链接地址:https://www.ymkuzhan.com/35850.html
下载声明:
本站资源如无特殊说明默认解压密码为www.ymkuzhan.com建议使用WinRAR解压; 本站资源来源于用户分享、互换、购买以及网络收集等渠道,本站不提供任何技术服务及有偿服务,资源仅提供给大家学习研究请勿作它用。 赞助本站仅为维持服务器日常运行并非购买程序及源码费用因此不提供任何技术支持,如果你喜欢该程序,请购买正版! 版权声明:
下载本站资源学习研究的默认同意本站【版权声明】若本站提供的资源侵犯到你的权益,请提交版权证明文件至邮箱ymkuzhan#126.com(将#替换为@)站长将会在三个工作日内为您删除。 免责声明:
您好,本站所有资源(包括但不限于:源码、素材、工具、字体、图像、模板等)均为用户分享、互换、购买以及网络收集而来,并未取得原始权利人授权,因此禁止一切商用行为,仅可用于个人研究学习使用。请务必于下载后24小时内彻底删除,一切因下载人使用所引起的法律相关责任,包括但不限于:侵权,索赔,法律责任,刑事责任等相关责任,全部由下载人/使用人,全部承担。以上说明,一经发布视为您已全部阅读,理解、同意以上内容,如对以上内容持有异议,请勿下载,谢谢配合!支持正版,人人有责,如不慎对您的合法权益构成侵犯,请联系我们对相应内容进行删除,谢谢!