溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

laravel中事件以及觀察者的示例分析

發(fā)布時(shí)間:2021-08-17 09:18:17 來(lái)源:億速云 閱讀:97 作者:小新 欄目:編程語(yǔ)言

這篇文章給大家分享的是有關(guān)laravel中事件以及觀察者的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

一:事件與監(jiān)聽(tīng)器

事件是一個(gè)比較廣泛的的名詞,他可以代表所做的一個(gè)動(dòng)作。和事件一起出現(xiàn)的就是監(jiān)聽(tīng)器了,其作用是用來(lái)監(jiān)聽(tīng)你所做的事情,用來(lái)對(duì)你的行為做后續(xù)處理。
事件系統(tǒng)為應(yīng)用各個(gè)方面的解耦提供了非常棒的方法,因?yàn)閱蝹€(gè)事件可以擁有多個(gè)互不依賴(lài)的監(jiān)聽(tīng)器。例如,你可能希望每次訂單發(fā)貨時(shí)向用戶(hù)發(fā)送一個(gè)通知。你可以編寫(xiě)一個(gè)可以被監(jiān)聽(tīng)的事件,而不是將訂單處理代碼通知代碼耦合在一起。

事件:
Laravel 框架想要?jiǎng)?chuàng)建事件可以通過(guò)以下命令來(lái)創(chuàng)建:

php artisan make:event 事件名稱(chēng)

該文件會(huì)存放在 app/Events 目錄下面。

監(jiān)聽(tīng)器:

創(chuàng)建監(jiān)聽(tīng)器可以使用以下命令來(lái)創(chuàng)建:

php artisan make:listener 監(jiān)聽(tīng)器名稱(chēng)

注冊(cè):

事件和監(jiān)聽(tīng)器在創(chuàng)建完畢后,還需要將二者聯(lián)合起來(lái)。我們可以在 EventServiceProvider 服務(wù)提供者中進(jìn)行注冊(cè)。如下:

    protected $listen = [
        事件名稱(chēng) => [
            監(jiān)聽(tīng)器名稱(chēng),
         .
        ],
    ];

分發(fā)

event(new TestEvent());

二:模型事件

模型事件是專(zhuān)門(mén)針對(duì)模型而額外添加的功能。其給我們創(chuàng)建了對(duì)應(yīng)的事件與監(jiān)聽(tīng)。在使用模型事件事,我們需要遵守模型給我們的規(guī)則:

  • retrieved:    獲取到模型實(shí)例后觸發(fā)

  • creating:     插入到數(shù)據(jù)庫(kù)前觸發(fā)

  • created:      插入到數(shù)據(jù)庫(kù)后觸發(fā)

  • updating: 更新到數(shù)據(jù)庫(kù)前觸發(fā)

  • updated:      更新到數(shù)據(jù)庫(kù)后觸發(fā)

  • saving:       保存到數(shù)據(jù)庫(kù)前觸發(fā)(插入/更新之前,無(wú)論插入還是更新都會(huì)觸發(fā))

  • saved:        保存到數(shù)據(jù)庫(kù)后觸發(fā)(插入/更新之后,無(wú)論插入還是更新都會(huì)觸發(fā))

  • deleting:     從數(shù)據(jù)庫(kù)刪除記錄前觸發(fā)

  • deleted:      從數(shù)據(jù)庫(kù)刪除記錄后觸發(fā)

  • restoring:    恢復(fù)軟刪除記錄前觸發(fā)

  • restored:     恢復(fù)軟刪除記錄后觸發(fā)

需要在模型處綁定

protected $dispatchesEvents = [
        'saving' => \App\Events\TestEvent::class,
//        'updated' => \App\Events\TestEvent::class,
];

三:觀察者

事件需要與監(jiān)聽(tīng)器關(guān)聯(lián)來(lái),當(dāng)監(jiān)聽(tīng)器變多了我們還需進(jìn)行注冊(cè)實(shí)現(xiàn),這樣會(huì)比較麻煩,這時(shí)我們可以考慮使用觀察者。如果在一個(gè)模型上監(jiān)聽(tīng)了多個(gè)事件,可以使用觀察者來(lái)將這些監(jiān)聽(tīng)器組織到一個(gè)單獨(dú)的類(lèi)中。

觀察者使用:

觀察者的創(chuàng)建可以使用以下命令來(lái)創(chuàng)建:

php artisan make:observer

如果想要直接跟模型關(guān)聯(lián)起來(lái),還可以直接加入?yún)?shù)與模型關(guān)聯(lián):

php artisan make:observer UserObserver --model=User

觀察者注冊(cè):
在服務(wù)提供者中注冊(cè)

User::observe(UserObserver::class);

或在模型中注冊(cè)

public static function booted()
{
     self::observe(UserObserver::class);
}

感謝各位的閱讀!關(guān)于“l(fā)aravel中事件以及觀察者的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI