- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- laravel中事件以及觀(guān)察者的示例分析
這篇文章給大家分享的是有關(guān)laravel中事件以及觀(guān)察者的示例分析的內容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
一:事件與監聽(tīng)器
事件是一個(gè)比較廣泛的的名詞,他可以代表所做的一個(gè)動(dòng)作。和事件一起出現的就是監聽(tīng)器了,其作用是用來(lái)監聽(tīng)你所做的事情,用來(lái)對你的行為做后續處理。
事件系統為應用各個(gè)方面的解耦提供了非常棒的方法,因為單個(gè)事件可以擁有多個(gè)互不依賴(lài)的監聽(tīng)器。例如,你可能希望每次訂單發(fā)貨時(shí)向用戶(hù)發(fā)送一個(gè)通知。你可以編寫(xiě)一個(gè)可以被監聽(tīng)的事件,而不是將訂單處理代碼通知代碼耦合在一起。
事件:
Laravel 框架想要創(chuàng )建事件可以通過(guò)以下命令來(lái)創(chuàng )建:
php artisan make:event 事件名稱(chēng)
該文件會(huì )存放在 app/Events 目錄下面。
監聽(tīng)器:
創(chuàng )建監聽(tīng)器可以使用以下命令來(lái)創(chuàng )建:
php artisan make:listener 監聽(tīng)器名稱(chēng)
注冊:
事件和監聽(tīng)器在創(chuàng )建完畢后,還需要將二者聯(lián)合起來(lái)。我們可以在 EventServiceProvider 服務(wù)提供者中進(jìn)行注冊。如下:
protected $listen = [ 事件名稱(chēng) => [ 監聽(tīng)器名稱(chēng), . ], ];
分發(fā)
event(new TestEvent());
二:模型事件
模型事件是專(zhuān)門(mén)針對模型而額外添加的功能。其給我們創(chuàng )建了對應的事件與監聽(tīng)。在使用模型事件事,我們需要遵守模型給我們的規則:
retrieved: 獲取到模型實(shí)例后觸發(fā)
created: 插入到數據庫后觸發(fā)
updating: 更新到數據庫前觸發(fā)
updated: 更新到數據庫后觸發(fā)
saving: 保存到數據庫前觸發(fā)(插入/更新之前,無(wú)論插入還是更新都會(huì )觸發(fā))
saved: 保存到數據庫后觸發(fā)(插入/更新之后,無(wú)論插入還是更新都會(huì )觸發(fā))
deleting: 從數據庫刪除記錄前觸發(fā)
deleted: 從數據庫刪除記錄后觸發(fā)
restoring: 恢復軟刪除記錄前觸發(fā)
restored: 恢復軟刪除記錄后觸發(fā)
需要在模型處綁定
protected $dispatchesEvents = [ 'saving' => \App\Events\TestEvent::class, // 'updated' => \App\Events\TestEvent::class, ];
三:觀(guān)察者
事件需要與監聽(tīng)器關(guān)聯(lián)來(lái),當監聽(tīng)器變多了我們還需進(jìn)行注冊實(shí)現,這樣會(huì )比較麻煩,這時(shí)我們可以考慮使用觀(guān)察者。如果在一個(gè)模型上監聽(tīng)了多個(gè)事件,可以使用觀(guān)察者來(lái)將這些監聽(tīng)器組織到一個(gè)單獨的類(lèi)中。
觀(guān)察者使用:
觀(guān)察者的創(chuàng )建可以使用以下命令來(lái)創(chuàng )建:
php artisan make:observer
如果想要直接跟模型關(guān)聯(lián)起來(lái),還可以直接加入參數與模型關(guān)聯(lián):
php artisan make:observer UserObserver --model=User
觀(guān)察者注冊:
在服務(wù)提供者中注冊
User::observe(UserObserver::class);
或在模型中注冊
public static function booted() { self::observe(UserObserver::class); }
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站