一、简单介绍事件和监听器
事件Event:主要用做数据的载体,里面只是包含要传递的数据。
监听器Listener:事件真正被触发的地方,其handle方法接受传入的Event对象,并在此处理Event中带来的数据。
二、首先定义事件和事件监听器
打开App\Providers\EventServiceProvider.php,给$listen数组赋值要添加的事件和监听器,可定义多个事件,每个事件也可以定义多个监听器。
比如:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36  | 
						<?php namespace App\Providers; use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; class EventServiceProvider extends ServiceProvider {     /**      * The event listener mappings for the application.      *      * @var array      */     protected $listen = [         'App\Events\UserReigisterEvent' => [           'App\Listeners\UserRegisterListener',           ],         'App\Events\UserLoginEvent' => [             'App\Listeners\UserLoginListener',         ],     ];     /**      * Register any other events for your application.      *      * @param  \Illuminate\Contracts\Events\Dispatcher  $events      * @return void      */     public function boot(DispatcherContract $events)     {         parent::boot($events);         //     } }  | 
					
三、在控制台生成相关文件
在控制台输入命令:
php artisan event:generate
执行完以后可以看到App\Event和App\Listeners两个目录下多了相应的php类
四、定义Event类
Event类主要用于运输数据,在_construct函数的参数中传入,并将值保存在内部成员变量中,示例如下:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38  | 
						<?php namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use App\User; class UserLoginEvent extends Event {     use SerializesModels;     public $user;     public $logintimes;     /**      * Create a new event instance.      *      * @return void      */     public function __construct(User $_user, $_logintimes)     {         $this->user = $_user;         $this->logintimes = $_logintimes;     }     /**      * Get the channels the event should be broadcast on.      *      * @return array      */     public function broadcastOn()     {         return [];     } }  | 
					
五、Listener中处理事件
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32  | 
						<?php namespace App\Listeners; use App\Events\UserLoginEvent; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; class UserLoginListener {     /**      * Create the event listener.      *      * @return void      */     public function __construct()     {         //     }     /**      * Handle the event.      *      * @param  UserLoginEvent  $event      * @return void      */     public function handle(UserLoginEvent $event)     {         echo $event->logintimes;         echo $event->user->username;     } }  | 
					
六、触发事件
比如在用户登录成功的地方调用前面定义的事件
| 
					 1 2  | 
						    $loginevent = new UserLoginEvent($loginuser, $logintimes);     event($loginevent);  | 
					
