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