Laravel 8 事件和監(jiān)聽(tīng)器示例
介紹
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ā)人員。