适用场景:记录文章浏览量
php artisan make:event 事件名
示例:
php artisan make:event MyEvent
Laravel目录appEvents已经生成MyEvent.php文件
<?php namespace AppEvents; use AppEventsEvent; use IlluminateQueueSerializesModels; use IlluminateContractsBroadcastingShouldBroadcast; class MyEvent extends Event { use SerializesModels; /** * Create a new event instance. * * @return void */ public function __construct() { // } /** * Get the channels the event should be broadcast on. * * @return array */ public function broadcastOn() { return []; } }
事件必须有监听者,我们先在appProviders目录下找到EventServiceProvider.php文件,该文件内有一个Events-Listeners数组来保存事件和监听者的映射关系。
protected $listen = [ 'AppEventsMyEvent' => [ 'AppListenersMyListener1', 'AppListenersMyListener2' ] ];
这里,我们让一个事件有两个监听者,使用artisan控制台自动生成php文件
php artisan event:generate
LaravelappListeners目录下已经生成了MyListener1.php和MyListener2.php
问题来了,我们怎么触发这个事件?
这里借用我们上一篇博客说的Console,来测试这个事件,如果你对Console不熟,可以看http://www.cnblogs.com/sweng/p/6358919.html
对Check类中修改handle()函数,使用Event::fire(new MyEvent())触发事件,实际上是传入一个Event对象
<?php namespace AppConsoleCommands; use IlluminateConsoleCommand; // use IlluminateSupportFacadesEvent; use AppEventsMyEvent; class Check extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'check'; /** * The console command description. * * @var string */ protected $description = 'Command description'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { // echo 'checking...'; Event::fire(new MyEvent()); } }