摘要:在日常處理一些用戶操作事件時,我們有時候需要記錄下來,方便以后查閱,或者大數(shù)據(jù)統(tǒng)計。
在日常處理一些用戶操作事件時,我們有時候需要記錄下來,方便以后查閱,或者大數(shù)據(jù)統(tǒng)計。
Laravel 在模型事件中處理起來很方便:https://laravel-china.org/docs/laravel/5.5/eloquent#events
Laravel 的模型事件有兩種方式,
設(shè)置dispatchesEvents屬性映射事件類
使用觀察器來注冊事件,這里介紹第二種
新建模型
php artisan make:model Log
創(chuàng)建遷移表:
php artisan make:migration create_logs_table
表的結(jié)構(gòu)大概是這樣,可按需設(shè)計
engine = "InnoDB"; $table->increments("id"); $table->string("user_id")->comment("操作人的ID"); $table->string("user_name")->comment("操作人的名字,方便直接查閱"); $table->string("url")->comment("當(dāng)前操作的URL"); $table->string("method")->comment("當(dāng)前操作的請求方法"); $table->string("event")->comment("當(dāng)前操作的事件,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
新建一個服務(wù)提供者統(tǒng)一注冊所有的模型事件觀察器(后面的名字可以自己起得形象一點)
php artisan make:provider ObserverLogServiceProvider
到/config/app.php中的providers數(shù)組注冊(大概如圖中)
在app目錄下新建文件夾Observers存放模型觀察器,并新建基類LogBaseServer并在構(gòu)造函數(shù)構(gòu)建基本屬性(CLI是因為在命令行執(zhí)行時不存在用戶執(zhí)行)
新建一個觀察器繼承基類LogBaseServer(User模型,方法的名字要對應(yīng)文檔中的事件)
到新建的服務(wù)提供者ObserverLogServiceProvider中運行
為需要的模型注冊事件(我這挺多的,之后大概長這樣)
然后我們觸發(fā)一些事件(增刪改,表的數(shù)據(jù)就有了)
多對多的關(guān)聯(lián)插入不會出觸發(fā)模型(比如attach方法)
這時候就需要自己新建事件類來模擬(這里拿分配權(quán)限給角色粗略說一下)
1.在EventServiceProvider中的listen屬性綁定好事件
2.事件PermissionRoleEvent中的注入兩個參數(shù),一個是角色,另一個是attach或者detach返回的數(shù)組
3.事件監(jiān)聽器PermissionRoleEventLog也繼承基類LogBaseServer,這里就是根據(jù)傳入的數(shù)組id遍歷,然后創(chuàng)建日志
4.之后應(yīng)用事件
更優(yōu)雅的處理登錄注銷事件
1.在EventServiceProvider中的subscribe屬性綁定好處理的類
2.事件監(jiān)聽類的方法
3.之后的效果就是這樣了:
END
原文地址
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/28427.html
摘要:別堵塞了傳輸層大多數(shù)事件處理器被當(dāng)作傳輸層組件。解耦事件處理器開始本命題前,我們來使用一個示例。假想下把隊列處理器用來發(fā)送消息給用戶。盡量避免在事件處理器中摻雜太多的業(yè)務(wù)邏輯。 聲明:本文并非博主原創(chuàng),而是來自對《Laravel 4 From Apprentice to Artisan》閱讀的翻譯和理解,當(dāng)然也不是原汁原味的翻譯,能保證90%的原汁性,另外因為是理解翻譯,肯定會有錯誤的...
摘要:控制只是用來接收請求并請求邏輯處理類。事實上,業(yè)務(wù)邏輯無需感知網(wǎng)絡(luò),網(wǎng)絡(luò)僅僅接入應(yīng)用的傳輸機制,他不應(yīng)超出應(yīng)用中的路由和控制器的范疇。職責(zé)分離是編寫健壯應(yīng)用的關(guān)鍵。其他通常,類庫應(yīng)該以規(guī)范組織在我們的應(yīng)用中。 聲明:本文并非博主原創(chuàng),而是來自對《Laravel 4 From Apprentice to Artisan》閱讀的翻譯和理解,當(dāng)然也不是原汁原味的翻譯,能保證90%的原汁性,另...
摘要:文章轉(zhuǎn)自視頻教程優(yōu)雅的應(yīng)用調(diào)試工具新擴展是由和開源的應(yīng)用的調(diào)試工具。計劃任務(wù)列出已運行的計劃任務(wù)。該封閉函數(shù)會被序列化為一個長字符串,加上他的哈希與簽名如出一轍該功能將記錄所有異常,并可查看具體異常情況。事件顯示所有事件的列表。 文章轉(zhuǎn)自:https://laravel-china.org/topics/19013視頻教程:047. 優(yōu)雅的應(yīng)用調(diào)試工具--laravel/telesco...
摘要:我們設(shè)置好模型的觸發(fā)時機,當(dāng)模型觸發(fā)事件,監(jiān)聽器就會被調(diào)。雖然,我能通過模型觀察器快速實現(xiàn),但是,我想引導(dǎo)你為單個事件觸發(fā)配置事件監(jiān)聽器?,F(xiàn)在,當(dāng)模型調(diào)用事件時,我們注冊的事件監(jiān)聽器也會被觸發(fā)并執(zhí)行。 showImg(https://segmentfault.com/img/remote/1460000014033990); Laravel 模型事件允許你監(jiān)聽模型生命周期內(nèi)的多個關(guān)鍵點...
摘要:模型事件在的世界中你對大多數(shù)操作都會或多或少的觸發(fā)一些模型事件今天就來看一下模型事件的使用。事先已經(jīng)定義好了個模型事件以供我們使用它們分別是。和會在數(shù)據(jù)庫中的真值修改前后觸發(fā)。監(jiān)聽數(shù)據(jù)即將保存的事件。監(jiān)聽數(shù)據(jù)從軟刪除狀態(tài)恢復(fù)后的事件。 模型事件 在 Laravel 的世界中,你對 Eloquent 大多數(shù)操作都會或多或少的觸發(fā)一些模型事件,今天就來看一下模型事件的使用。 Laravel...
閱讀 2984·2021-11-23 09:51
閱讀 3258·2021-11-12 10:36
閱讀 3268·2021-09-27 13:37
閱讀 3238·2021-08-17 10:15
閱讀 2651·2019-08-30 15:55
閱讀 2834·2019-08-30 13:07
閱讀 850·2019-08-29 16:32
閱讀 2697·2019-08-26 12:00