搜尋
首頁php框架Laravel詳解Laravel模型事件的兩種方式

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


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。如有侵權,請聯絡admin@php.cn刪除
    任務管理工具:遠程項目的優先級和跟踪進度任務管理工具:遠程項目的優先級和跟踪進度May 02, 2025 am 12:25 AM

    taskManagementsToolSareEssentialForefectiverMototeprojectManagementbyPrioritizingTaskSandTrackingProgress.1)USETOOLSLIKETRELLOANDASANATASANATOSETPRIORITIONTAGS.2)

    最新的Laravel版本如何提高性能?最新的Laravel版本如何提高性能?May 02, 2025 am 12:24 AM

    Laravel10enhancesPerformancEthroughSeveralKeyKeyFeatures.1)itintroducesquereBuilderCachingTordorcachingTordOuctedSataBaseload.2)itoptimiesseloizeseloquentmodelloAdingwithlazyproxies.3)

    全棧Laravel應用程序的部署策略全棧Laravel應用程序的部署策略May 02, 2025 am 12:22 AM

    最佳的全棧Laravel應用部署策略包括:1.零停機部署,2.藍綠部署,3.持續部署,4.金絲雀發布。 1.零停機部署使用Envoy或Deployer自動化部署過程,確保應用在更新時保持可用。 2.藍綠部署通過維護兩個環境實現無停機部署,並允許快速回滾。 3.持續部署通過GitHubActions或GitLabCI/CD自動化整個部署流程。 4.金絲雀發布通過Nginx配置,將新版本逐步推廣給用戶,確保性能優化和快速回滾。

    擴展全堆棧Laravel應用程序:最佳實踐和技術擴展全堆棧Laravel應用程序:最佳實踐和技術May 02, 2025 am 12:22 AM

    toscalealaravelApplication有效,焦點databaseSharding,緩存,負載平衡和microservices.1)實現DataBasEshardingTodistaCripedataCrossmultipledataBasesForimProvesforimPrevperformance.2)uselaravel'scachingsystemystemystemystemywithredsormememememememcachedtebachedtebab

    沉默的鬥爭:克服分佈式團隊中的溝通障礙沉默的鬥爭:克服分佈式團隊中的溝通障礙May 02, 2025 am 12:20 AM

    doovercomecommunicationbarriersIndistributedTeams,使用:1)VideoCallSforface-to-Faceinteraction,2)setClearresponsEtimepections,3)chooseappropropropraproproprapropropriatecommunicationTools,4)CreatseateAteAteAteamCommunicationGuide和5)建立PemersonalBoundariestAriestOpeopReventBreventBurniationBurnication.the

    使用Laravel Blade在全棧項目中進行前端模板使用Laravel Blade在全棧項目中進行前端模板May 01, 2025 am 12:24 AM

    laravelbladeenhancesfrontendtemplatinginflatinginflationll-stackprojectsbyferingCleanSyntaxandaxandpoperfelfulfeatures.1)itallowsforeasyvariableasyvariabledisplayandControlstructures.2)bladesuportsuportsuportscreatingingingingingingingingingingangingandredreingscomponents components components components,aidinginmanagingcomplexuis.3)

    使用Laravel:實用教程構建全堆棧應用程序使用Laravel:實用教程構建全堆棧應用程序May 01, 2025 am 12:23 AM

    laravelisidealforll-stackapplicationsduetoitselegantsyntax,complastissionecosystem和perperatedfulfeatures.1)useeloquentormforintuivelbackenddatamanipulation,butavoidn 1queryissues.2)

    您使用哪種工具來保持遠程角色保持連接?您使用哪種工具來保持遠程角色保持連接?May 01, 2025 am 12:21 AM

    forremotework,iusezoomforvideOcalls,Slackformessing,trelloforprojectmanagement,and giThubForCodeCollaboration.1)Zoomisreliable forlailible forlargemeetingsbuthastimelimitsonthefreeversion.2)

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    mPDF

    mPDF

    mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

    Safe Exam Browser

    Safe Exam Browser

    Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

    MantisBT

    MantisBT

    Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

    SAP NetWeaver Server Adapter for Eclipse

    SAP NetWeaver Server Adapter for Eclipse

    將Eclipse與SAP NetWeaver應用伺服器整合。

    VSCode Windows 64位元 下載

    VSCode Windows 64位元 下載

    微軟推出的免費、功能強大的一款IDE編輯器