在日常处理一些用户操作事件的时候,我们有时需要记录下来以供日后参考或者大数据统计。Laravel在模型事件中处理起来非常方便:https://laravel-china.org/docs/laravel/5.5/eloquent#eventsLaravel中有两种方法可以对事件进行建模。设置dispatchesEvents属性来映射事件类并使用观察者来注册事件。这里是第二个新模型phpartisanmake:modelLogengine='InnoDB';$table->increments('id');$table->string('user_id')->comment('operatorID');$table->string('user_name')->comment('运营商名称,直接引用');$table->string('url')->comment('当前操作的URL');$table->string('method')->comment('当前操作的请求方法');$table->string('event')->comment('当前操作的事件,create,update,delete');$table->string('表格')->comment('操作表');$table->string('描述')->default('');$表->时间戳();});DB::statement("ALTERTABLE`logs`comment'操作日志表'");}/***反转迁移。**@returnvoid*/publicfunctiondown(){Schema::dropIfExists('logs');}}运行迁移生成表phpartisanmigrate新建一个服务提供者统一注册所有模型事件观察者(后面的名字可以形象一点)phpartisanmake:providerObserverLogServiceProvider向/config/app.php中的providers数组注册(大概如图)在app目录下新建文件夹Observers存放模型观察者,新建基类LogBaseServer并在构造函数中构建基础属性(CLI是因为在命令行执行时没有用户执行)新建观察者继承基类LogBaseServer(User模型,方法名要对应文档中的事件)给新建的服务提供者ObserverLogServiceProvider作为需要的模型运行注册事件(我有很多,后面会长这样)然后我们触发一些事件(增删改查,表中的数据都会有)。多对多关联插入不会触发触发模型(如attach方法)。这时候我们就需要自己新建一个事件类来模拟了(这里粗略的说一下给角色分配权限)1.在EventServiceProvider中绑定事件到listen属性2.在事件PermissionRoleEvent中注入两个参数,一个是role,另一个是attach或detach返回的数组3.事件监听器PermissionRoleEventLog也继承了基类LogBaseServer,这里是根据传入的数组id遍历,然后创建日志4.之后,应用事件处理更优雅的登陆和登出事件1.EventServiceProvider类中的subscribe属性绑定,好办2.事件监听类的方法3.之后的效果是这样的:END原地址
