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

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

Jul 23, 2021 pm 03:03 PM
laravel php

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


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中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱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

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

    熱門文章

    <🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    北端:融合系統,解釋
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    熱門話題

    Java教學
    1665
    14
    CakePHP 教程
    1424
    52
    Laravel 教程
    1322
    25
    PHP教程
    1270
    29
    C# 教程
    1249
    24
    繼續使用PHP:耐力的原因 繼續使用PHP:耐力的原因 Apr 19, 2025 am 12:23 AM

    PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

    IIS和PHP的兼容性:深度潛水 IIS和PHP的兼容性:深度潛水 Apr 22, 2025 am 12:01 AM

    IIS和PHP可以兼容,通過FastCGI實現。 1.IIS通過配置文件將.php文件請求轉發給FastCGI模塊。 2.FastCGI模塊啟動PHP進程處理請求,提高性能和穩定性。 3.實際應用中需注意配置細節、錯誤調試和性能優化。

    Laravel vs. Python(與框架):比較分析 Laravel vs. Python(與框架):比較分析 Apr 21, 2025 am 12:15 AM

    Laravel適合團隊熟悉PHP且需功能豐富的項目,Python框架則視項目需求而定。 1.Laravel提供優雅語法和豐富功能,適合需要快速開發和靈活性的項目。 2.Django適合複雜應用,因其“電池包含”理念。 3.Flask適用於快速原型和小型項目,提供極大靈活性。

    如果session_start()被多次調用會發生什麼? 如果session_start()被多次調用會發生什麼? Apr 25, 2025 am 12:06 AM

    多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

    使用Laravel:使用PHP簡化Web開發 使用Laravel:使用PHP簡化Web開發 Apr 19, 2025 am 12:18 AM

    Laravel優化Web開發流程的方法包括:1.使用路由系統管理URL結構;2.利用Blade模板引擎簡化視圖開發;3.通過隊列處理耗時任務;4.使用EloquentORM簡化數據庫操作;5.遵循最佳實踐提高代碼質量和可維護性。

    作曲家:通過AI的幫助開發PHP 作曲家:通過AI的幫助開發PHP Apr 29, 2025 am 12:27 AM

    AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

    哪些數據庫版本與最新的Laravel兼容? 哪些數據庫版本與最新的Laravel兼容? Apr 25, 2025 am 12:25 AM

    最新版本的Laravel10與MySQL5.7及以上、PostgreSQL9.6及以上、SQLite3.8.8及以上、SQLServer2017及以上兼容。這些版本選擇是因為它們支持Laravel的ORM功能,如MySQL5.7的JSON數據類型,提升了查詢和存儲效率。

    php框架laravel和yii區別是什麼 php框架laravel和yii區別是什麼 Apr 30, 2025 pm 02:24 PM

    Laravel和Yii的主要區別在於設計理念、功能特性和使用場景。 1.Laravel注重開發的簡潔和愉悅,提供豐富的功能如EloquentORM和Artisan工具,適合快速開發和初學者。 2.Yii強調性能和效率,適用於高負載應用,提供高效的ActiveRecord和緩存系統,但學習曲線較陡。

    See all articles