适用场景:记录文章浏览量
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());
}
}