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)); });