最新消息: 关于Git&GitHub 版本控制你了解多少?
您现在的位置是:群英 > 开发技术 > PHP语言 >
laravel模型事件有什么用?一文带你看懂laravel模型
PHP中文网发表于 2021-08-25 17:34 次浏览

    这篇文章主要给大家分享的是laravel模型事件的内容,laravel模型事件的应用还是比较方便和实用的,因此分享给大家做个参考,感兴趣的朋友就跟随小编来学习一下吧。

    Laravel 模型事件的应用

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

    Laravel 在模型事件中处理起来很方便,其中Laravel 的模型事件有两种方式,

  • 设置dispatchesEvents属性映射事件类
  • 使用观察器来注册事件,这里介绍第二种
  • 新建模型

    php artisan make:model Log

<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class Log extends Model
{
    protected $fillable = ['user_name', 'user_id', 'url', 'event', 'method', 'table', 'description'];
}
  • 创建迁移表:

    php artisan make:migration create_logs_table

  • 表的结构大概是这样,可按需设计
<?php

use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;

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.之后的效果就是这样了:

    以上就是关于laravel模型事件的相关介绍了,上文有对Laravel模型事件的两种方式详细介绍,有这方面学习需要的朋友可以参考,希望本文对大家学习有帮助,更多请关注群英网络其它相关文章。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐