Laravel 8 事件和監(jiān)聽(tīng)器示例

yanding 2023-06-29 435

介紹

Laravel 為事件和監(jiān)聽(tīng)器提供了一種簡(jiǎn)單的機(jī)制,因此無(wú)論何時(shí)你想訂閱或監(jiān)聽(tīng)你的應(yīng)用程序的任何事件,你都可以輕松完成。您可以向它們的偵聽(tīng)器注冊(cè)事件,并決定您希望它們?cè)谔囟ú僮骱髨?zhí)行的操作。例如,無(wú)論何時(shí)創(chuàng)建新訂單,我們都希望向賣(mài)家發(fā)送郵件或短信。為簡(jiǎn)化起見(jiàn),我們可以說(shuō)事件是應(yīng)用程序中采取的操作,而偵聽(tīng)器是響應(yīng)事件的操作。

在本教程中,我們將學(xué)習(xí)和探索Laravel 8 事件和監(jiān)聽(tīng)器。我們將開(kāi)發(fā)一個(gè)小型演示應(yīng)用程序,每當(dāng)創(chuàng)建用戶(hù)時(shí)我們都會(huì)在其中發(fā)送一封電子郵件。在這種情況下,我們可以說(shuō)用戶(hù)創(chuàng)建是一個(gè)事件,監(jiān)聽(tīng)器將在監(jiān)聽(tīng)該事件時(shí)發(fā)送一封電子郵件。

教程目標(biāo):Laravel 8 事件和監(jiān)聽(tīng)器

在開(kāi)始開(kāi)發(fā)部分之前,讓我們看看我們?cè)诒窘坛讨袠?gòu)建的內(nèi)容。

注冊(cè)事件和監(jiān)聽(tīng)器

第一步是注冊(cè)事件和相應(yīng)的偵聽(tīng)器。為此,Laravel 提供了一個(gè)事件服務(wù)提供者.php您可以在其中定義事件和偵聽(tīng)器的文件。

$聽(tīng)屬性包含一個(gè)數(shù)組,用于將所有事件和偵聽(tīng)器注冊(cè)為鍵值對(duì)。如下所示定義事件和偵聽(tīng)器。

// 事件服務(wù)提供者.php


受保護(hù)的 $listen = [
  已注冊(cè)::類(lèi) => [
    發(fā)送電子郵件驗(yàn)證通知::類(lèi),
  ],
  'App\Event\UserCreated' => [
    'App\Listeners\SendEmail'
  ]];

注冊(cè)事件和偵聽(tīng)器后,運(yùn)行以下命令為相應(yīng)的事件和偵聽(tīng)器創(chuàng)建文件。


php artisan 事件:生成

上面的命令會(huì)生成兩個(gè)文件,分別是:

  • UserCreated 在 app/Events

  • 在 app/Listeners 中發(fā)送電子郵件

完成Laravel 8 事件和監(jiān)聽(tīng)器設(shè)置后,現(xiàn)在是時(shí)候開(kāi)始處理邏輯部分了。

定義事件邏輯

在本節(jié)中,我們將定義我們希望偵聽(tīng)器執(zhí)行的邏輯集的動(dòng)作(事件);在我們的演示應(yīng)用程序中,操作是創(chuàng)建用戶(hù)。

打開(kāi)App\Events\UserCreated.php并使用以下代碼將實(shí)際電子郵件地址傳遞為$電子郵件__構(gòu)造UserCreated類(lèi)的方法

// App\Events\UserCreated.php


公共$電子郵件;
公共函數(shù) __construct($email)
{
  $this->email = $email;
}

整個(gè)文件將如下所示。


命名空間應(yīng)用\事件;使用 Illuminate\Broadcasting\Channel;使用 Illuminate\Broadcasting\InteractsWithSockets;使用 Illuminate\Broadcasting\PresenceChannel;使用 Illuminate\Broadcasting\PrivateChannel;使用 Illuminate\Contracts\Broadcasting\ShouldBroadcast;使用 Illuminate\Contracts\Queue\ShouldQueue;使用 Illuminate\Foundation\Events\Dispatchable;使用 Illuminate\Queue\SerializesModels;類(lèi) UserCreated 實(shí)現(xiàn) ShouldQueue{
   使用 Dispatchable、InteractsWithSockets、SerializesModels;7i
   公共$電子郵件;
   /**
    * 創(chuàng)建一個(gè)新的事件實(shí)例。
    *
    * @return 無(wú)效
    */
   公共函數(shù) __construct($email)
   {
       $this->email = $email;
   }
   /**
    * 獲取事件應(yīng)該廣播的頻道。
    *
    * @return \Illuminate\Broadcasting\Channel|數(shù)組
    */
   公共函數(shù) broadcastOn()
   {
       return new PrivateChannel('頻道名稱(chēng)');
   }}

這里我們繼承 ShouldQueue 接口使用類(lèi) UserCreated 實(shí)現(xiàn) ShouldQueue.它會(huì)自動(dòng)將邏輯放入隊(duì)列中。

定義監(jiān)聽(tīng)器邏輯:handle() 方法

在這里,我們將編寫(xiě)用于在創(chuàng)建用戶(hù)時(shí)發(fā)送電子郵件的實(shí)際邏輯。在App\Listeners\SendEmail.php中,通過(guò)用戶(hù)創(chuàng)建 $eventhandle() 方法的參數(shù),以便我們可以從事件中獲得值。handle()方法中的邏輯將在事件被調(diào)用時(shí)執(zhí)行。


公共函數(shù)句柄(UserCreated $event)
{
 print_r($event->email);
 //我們可以從這里發(fā)送郵件
 echo ".. 來(lái)自聽(tīng)眾";
 出口;
}

調(diào)度事件

創(chuàng)建事件和偵聽(tīng)器后,現(xiàn)在是分派事件的時(shí)候了。這很簡(jiǎn)單;您只需要將事件類(lèi)對(duì)象傳遞給event()方法。

// 用戶(hù)控制器.php


事件(新用戶(hù)創(chuàng)建(“ abc@gmail.com ”));

GitHub 存儲(chǔ)庫(kù):Laravel 8 事件和監(jiān)聽(tīng)器

隨意克隆存儲(chǔ)庫(kù)并使用代碼。您可以在此處找到源代碼。

結(jié)論

我希望帶有示例的 Laravel 8 事件和監(jiān)聽(tīng)器教程對(duì)您有所幫助。如有任何疑問(wèn)和建議,請(qǐng)隨時(shí)與我們聯(lián)系。如果您是 Laravel 愛(ài)好者,您必須查看Laravel 教程頁(yè)面,我們?cè)谠擁?yè)面提供各種教程和源代碼。

您是否正在尋找具有最佳問(wèn)題解決能力的熟練且經(jīng)驗(yàn)豐富的 Laravel 開(kāi)發(fā)人員?如果是,那么您只需點(diǎn)擊一下即可聘請(qǐng)最好的 Laravel 開(kāi)發(fā)人員!立即聯(lián)系我們并為您的項(xiàng)目聘請(qǐng) Laravel 開(kāi)發(fā)人員。

言鼎科技

The End