资讯专栏INFORMATION COLUMN

Laravel 模型事件的应用

ralap / 454人阅读

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

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


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

表的结构大概是这样,可按需设计

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
原文地址

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28427.html

相关文章

  • Laravel深入学习6 - 应用体系结构:解耦事件处理器

    摘要:别堵塞了传输层大多数事件处理器被当作传输层组件。解耦事件处理器开始本命题前,我们来使用一个示例。假想下把队列处理器用来发送消息给用户。尽量避免在事件处理器中掺杂太多的业务逻辑。 声明:本文并非博主原创,而是来自对《Laravel 4 From Apprentice to Artisan》阅读的翻译和理解,当然也不是原汁原味的翻译,能保证90%的原汁性,另外因为是理解翻译,肯定会有错误的...

    HackerShell 评论0 收藏0
  • Laravel深入学习5 - 应用架构

    摘要:控制只是用来接收请求并请求逻辑处理类。事实上,业务逻辑无需感知网络,网络仅仅接入应用的传输机制,他不应超出应用中的路由和控制器的范畴。职责分离是编写健壮应用的关键。其他通常,类库应该以规范组织在我们的应用中。 声明:本文并非博主原创,而是来自对《Laravel 4 From Apprentice to Artisan》阅读的翻译和理解,当然也不是原汁原味的翻译,能保证90%的原汁性,另...

    lixiang 评论0 收藏0
  • Laravel Telescope:优雅应用调试工具

    摘要:文章转自视频教程优雅的应用调试工具新扩展是由和开源的应用的调试工具。计划任务列出已运行的计划任务。该封闭函数会被序列化为一个长字符串,加上他的哈希与签名如出一辙该功能将记录所有异常,并可查看具体异常情况。事件显示所有事件的列表。 文章转自:https://laravel-china.org/topics/19013视频教程:047. 优雅的应用调试工具--laravel/telesco...

    MasonEast 评论0 收藏0
  • Laravel 模型事件入门

    摘要:我们设置好模型的触发时机,当模型触发事件,监听器就会被调。虽然,我能通过模型观察器快速实现,但是,我想引导你为单个事件触发配置事件监听器。现在,当模型调用事件时,我们注册的事件监听器也会被触发并执行。 showImg(https://segmentfault.com/img/remote/1460000014033990); Laravel 模型事件允许你监听模型生命周期内的多个关键点...

    DandJ 评论0 收藏0
  • Laravel模型事件与 Observer

    摘要:模型事件在的世界中你对大多数操作都会或多或少的触发一些模型事件今天就来看一下模型事件的使用。事先已经定义好了个模型事件以供我们使用它们分别是。和会在数据库中的真值修改前后触发。监听数据即将保存的事件。监听数据从软删除状态恢复后的事件。 模型事件 在 Laravel 的世界中,你对 Eloquent 大多数操作都会或多或少的触发一些模型事件,今天就来看一下模型事件的使用。 Laravel...

    Yuanf 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<