Event顧名思義就是事件的意思,在實際開發中 當用戶作了某些動做或操做的時候 咱們須要監聽這些事件來作相應的處理。php
好比說用戶註冊一個帳戶咱們須要往用戶的郵箱中發驗證信息這種操做。數組
咱們能夠經過artisan命令來生成一個event和一個listener:app
php artisan make:event CustomEvent php artisan make:listener CustomListener
可是有一個更加便利的方法,首先來到這個文件下:app/Providers/EventServiceProvider.phpide
觀察這個數組:函數
protected $listen = [ 'App\Events\SomeEvent' => [ 'App\Listeners\EventListener', ], ];
咱們能夠在這個數組中寫咱們想要生成的Event和Listener,一個Event能夠對應多個Listener,下面來寫一個例子:測試
protected $listen = [ 'App\Events\UserSignUp' => [ 'App\Listeners\SendEmail', 'App\Listeners\SaveUser', ], ];
編輯完咱們想要的事件和監聽者後,使用artisan命令來生成他們:this
php artisan event:generate
生成的Evnet在app/Event中 而Listener在app/Listener中spa
進入到咱們剛剛建立的Event中:code
class UserSignUp extends Event { use SerializesModels; public $user; /** * Create a new event instance. * * @return void */ public function __construct(User $user) { // 能夠在構造方法中聲明要傳入的數據 這裏以User爲例 $this->user = $user; } /** * Get the channels the event should be broadcast on. * * @return array */ public function broadcastOn() { return []; }
而後進入到Listener中寫處理的邏輯:blog
class SendEmail { protected $mail; /** * Create the event listener. * * @return void */ public function __construct(Mail $mail) { // 能夠在這裏依賴注入你須要的功能 這裏以Email爲例 $this->mail = $mail; } /** * Handle the event. * * @param UserSignUp $event * @return void */ public function handle(UserSignUp $event) { // 在這裏完成要操做的業務邏輯,簡單測試一下 dump('send Email to ' . $event->user->name); } }
如今只差觸發這個事件了,觸發事件能夠使用全局幫助函數:
Route::get('/', function () { $user = \App\User::findOrFail(0); // 這樣就觸發了一條Event event(new \App\Events\UserSignUp($user)); });