首頁 > php框架 > Laravel > 主體

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

藏色散人
發布: 2021-07-26 09:11:17
轉載
2757 人瀏覽過

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


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 = [&#39;user_name&#39;, &#39;user_id&#39;, &#39;url&#39;, &#39;event&#39;, &#39;method&#39;, &#39;table&#39;, &#39;description&#39;];
}
登入後複製
  • 建立遷移表:

  • # 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(&#39;logs&#39;, 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

    新建一個服務提供者統一註冊所有的模型事件觀察者(後面的名字可以自己起得形像一點)詳解Laravel模型事件的兩種方式

      php artisan make:provider ObserverLogServiceProvider
    • /config/app.php中的providers
    • 陣列註冊(大概如圖)

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

    • #在app目錄下新資料夾Observers
    • 存放模型觀察器,並新建基底類別
    LogBaseServer

    並在建構子建構基本屬性(CLI是因為在命令列執行時不存在使用者執行)詳解Laravel模型事件的兩種方式

    • #新一個觀察器繼承基底類別
    LogBaseServer

    User模型,方法的名字要對應文件中的事件)詳解Laravel模型事件的兩種方式

    #到新建的服務提供者詳解Laravel模型事件的兩種方式ObserverLogServiceProvider中運行

    詳解Laravel模型事件的兩種方式#為需要的模型註冊事件(我這挺多的,之後大概長這樣)


    #然後我們觸發一些事件(增刪改,表的資料就有了)

    詳解Laravel模型事件的兩種方式多對多的關聯插入不會出觸發模型(例如

    attach

    #方法)這時候就需要自己新建事件類別來模擬(這裡拿分配權限給角色粗略說一下)1.在EventServiceProvider

    中的

    listen屬性綁定好事件詳解Laravel模型事件的兩種方式

    #############2.事件###PermissionRoleEvent###中的注入兩個參數,一個是角色,另一個是###attach###或###detach###傳回的陣列####################

    3.事件監聽器PermissionRoleEventLog也繼承基底類別LogBaseServer,這裡就是根據傳入的陣列id遍歷,然後建立日誌

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

    #4.之後應用事件

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


    • 更優雅的處理登入登出事件

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

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

    #2.事件監聽類別的方法

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

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

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

    以上是詳解Laravel模型事件的兩種方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:segmentfault.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板