[英]Why should i use events and listener in laravel
我了解laravel中的事件和偵聽器,但是我不知道事件和正常函數之間有什么區別,這意味着如果我想發送郵件,為什么我應該使用事件,而我可以使用正常函數來換句話說,什么時候必須使用事件以及何時必須使用函數
事件是為存儲在應用程序其他位置的可重用邏輯組織觸發器的一種方式。
例如,假設您有一個注冊用戶的應用程序。 注冊用戶后,您可能希望采取某些措施,例如:
功能方法
您可以使用類似的功能在控制器中執行此操作(請參見示例中的優點和缺點)
RegisterController
<?php
namespace App\Http\Controllers\Auth;
class RegisterController extends Controller
{
...
protected function create(array $data)
{
// Create user
$user = User::create();
// Send Welcome Email
$this->sendWelcomeEmail($user);
// Update statistics database
$this->updateStatisticsDatabase($user);
// Add them to the mailing list
$this->addToMailingList($user);
}
protected function sendWelcomeEmail(User $user)
{
...
}
protected function updateStatisticsDatabase(User $user)
{
...
}
protected function addToMailingList(User $user)
{
...
}
...
}
優點
缺點
事件/偵聽器方法
或者,我們可以將此功能拆分為Event
和Listener
。
RegisterController
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Events\UserWasRegistered;
class RegisterController extends Controller
{
...
protected function create(array $data)
{
// Create user
$user = User::create();
// Emit Event
event(new UserWasRegistered($user));
}
...
}
UserWasRegistered
<?php
namespace App\Events;
use App\User;
use Illuminate\Queue\SerializesModels;
class UserWasRegistered
{
use SerializesModels;
public $user;
/**
* Create a new event instance.
*
* @param \App\User $user
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
}
SendWelcomeEmail
<?php
namespace App\Listeners;
use App\Events\UserWasRegistered;
class SendWelcomeEmail
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param \App\Events\UserWasRegistered$event
* @return void
*/
public function handle(UserWasRegistered $event)
{
// Send the welcome email ...
}
}
優點
UserWasRegistered
事件,可以從應用程序中的任何位置調用該事件。 RegisterController
職責大大減少了 缺點
Event
,那么現在您的邏輯分布在多個文件中 TLDR
在簡單的應用程序上,您只需要在單個控制器中進行功能編程。 在更大,更復雜的應用程序中, Event
和Listener
往往是更好的選擇
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.