Laravel事件Event

适用场景:记录文章浏览量

1 php artisan make:event 事件名

示例:

1 php artisan make:event MyEvent

Laravel目录appEvents已经生成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 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数组来保存事件和监听者的映射关系。

1
2
3
4
5
6
protected $listen = [
    'AppEventsMyEvent' => [
        'AppListenersMyListener1',
        'AppListenersMyListener2'
    ]
];

这里,我们让一个事件有两个监听者,使用artisan控制台自动生成php文件

1 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对象

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

  

原文地址:https://www.cnblogs.com/wuyuxin/p/7039665.html