Laravel事件Event
适用场景:记录文章浏览量
1 | php artisan make :event 事件名 |
示例:
1 | php artisan make:event MyEvent |
Laravel目录\app\Events已经生成MyEvent.php文件
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\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; 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 []; } } |
事件必须有监听者,我们先在\app\Providers目录下找到EventServiceProvider.php文件,该文件内有一个Events-Listeners数组来保存事件和监听者的映射关系。
1
2
3
4
5
6
|
protected $listen = [ 'App\Events\MyEvent' => [ 'App\Listeners\MyListener1' , 'App\Listeners\MyListener2' ] ]; |
这里,我们让一个事件有两个监听者,使用artisan控制台自动生成php文件
1 | php artisan event:generate |
Laravel\app\Listeners目录下已经生成了MyListener1.php和MyListener2.php
问题来了,我们怎么触发这个事件?
这里借用我们上一篇博客说的Console,来测试这个事件,如果你对Console不熟,可以看http://www.cnblogs.com/sweng/p/6358919.html
对Check类中修改handle()函数,使用Event::fire(new MyEvent())触发事件,实际上是传入一个Event对象
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
39
40
41
42
43
44
45
46
47
48
|
<?php namespace App\Console\Commands; use Illuminate\Console\Command; // use Illuminate\Support\Facades\Event; use App\Events\MyEvent; 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()); } } |