站長資訊網
最全最豐富的資訊網站

詳解Laravel模型事件的兩種方式

在日常處理一些用戶操作事件時,我們有時候需要記錄下來,方便以后查閱,或者大數據統計。


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


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數組注冊(大概如圖中)

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式

  • app目錄下新建文件夾Observers存放模型觀察器,并新建基類LogBaseServer并在構造函數構建基本屬性(CLI是因為在命令行執行時不存在用戶執行)

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式

  • 新建一個觀察器繼承基類LogBaseServerUser模型,方法的名字要對應文檔中的事件)

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式

  • 到新建的服務提供者ObserverLogServiceProvider中運行

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式

  • 為需要的模型注冊事件(我這挺多的,之后大概長這樣)

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式

  • 然后我們觸發一些事件(增刪改,表的數據就有了)

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式


  • 多對多的關聯插入不會出觸發模型(比如attach方法)
  • 這時候就需要自己新建事件類來模擬(這里拿分配權限給角色粗略說一下)

1.在EventServiceProvider中的listen屬性綁定好事件

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式

2.事件PermissionRoleEvent中的注入兩個參數,一個是角色,另一個是attach或者detach返回的數組

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式

3.事件監聽器PermissionRoleEventLog也繼承基類LogBaseServer,這里就是根據傳入的數組id遍歷,然后創建日志

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式

4.之后應用事件

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式


  • 更優雅的處理登錄注銷事件

1.在EventServiceProvider中的subscribe屬性綁定好處理的類

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式

2.事件監聽類的方法

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式

3.之后的效果就是這樣了:

詳解Laravel模型事件的兩種方式詳解Laravel模型事件的兩種方式

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
特级精品毛片免费观看| 国产香蕉国产精品偷在线观看| 久久久这里只有精品加勒比| 久久精品一区二区三区资源网| 中文国产成人精品少久久| 无码人妻精品一区二| 国产精品黄页免费高清在线观看| 男人扒开女人下添高潮日韩视频| 精品国产乱码一二三四区五区| 国产私拍福利精品视频网站| 久久99精品久久只有精品 | 99热这就是里面只有精品| 国产午夜精品一区二区三区| 久久精品无码一区二区app| 国产精品户外野外| 国产精品免费久久久久电影网| 国产日韩精品一区二区三区| 日韩欧毛片免费视频| 亚洲国产精品日韩| heyzo亚洲精品日韩| 国产99精品在线观看| 国产精品二区高清在线| 日本久久中文字幕精品| 最新国产精品好看的国产精品| 国产成人无码精品久久久小说 | 人妻少妇看A偷人无码精品 | 国产精品久久久久影视青草| 麻豆国产VA免费精品高清在线 | 永久免费无码日韩视频| 国产成人亚综合91精品首页 | 思99热精品久久只有精品| 成人精品一区二区三区中文字幕| 久草热久草热线频97精品| 国产精品伦理久久久久久| 538国产精品一区二区在线| 亚洲日韩精品无码专区网站| 国产精品成人国产乱一区| 国产精品亚洲高清一区二区| 精品国产一级在线观看| 国产系列高清精品第一页| 国产一区二区精品尤物|