lumen 事件

今天需要实现日志功能,所有使用了一下lumen的event(事件)和listener(监听)

Lumen事件:https://lumen.laravel-china.org/docs/5.3/events   http://laravelacademy.org/post/3441.html

Laravel 的事件系统:https://d.laravel-china.org/docs/5.5/events

Laravel 5 事件的使用:https://www.cnblogs.com/chenqionghe/p/4884390.html

 

看完上面的文章基本就能实现了,下面做一些记录

我需要实现开门的日志写入

首先是OpenDoorEvent.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
<?php
 
namespace App\Events;
 
class OpenDoorEvent extends Event
{
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public $data;
 
    public function __construct($data)
    {
        $data['ip'] = $_SERVER["REMOTE_ADDR"];
        $data['open_time'] = date('Y-m-d H:i:s', time());
        $this->data = $data;
    }
 
    public function getData()
    {
        return $this->data;
    }
 
}

  

然后实现OpenDoorListener.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
33
34
35
36
37
38
39
40
41
42
43
44
<?php
 
namespace App\Listeners;
 
use App\Events\OpenDoorEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
 
class OpenDoorListener
{
 
    public $data;
 
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }
 
    /**
     * Handle the event.
     *
     * @param  ExampleEvent $event
     * @return void
     */
    public function handle(OpenDoorEvent $event)
    {
        $data = $event->getData();
        $this->data = $data;
        $this->run();
    }
 
    public function run()
    {
        if (!$this->data) return;
        var_dump($this->data);
        /** ... */
    }
 
}

  

  

接下来是注册监听EventServiceProvider.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
<?php
 
namespace App\Providers;
 
use App\Events\OpenDoorEvent;
use App\Listeners\OpenDoorListener;
use Laravel\Lumen\Providers\EventServiceProvider as ServiceProvider;
 
class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'App\Events\SomeEvent' => [
            'App\Listeners\EventListener',
        ],
        /*
        'App\Events\OpenDoorEvent' => [
            'App\Listeners\OpenDoorListener',
        ],
        */
        OpenDoorEvent::class => [
            OpenDoorListener::class
        ],
    ];
}   

  

最后随便找个控制器调用一下,在run方法把$data输出

1
2
3
4
5
6
7
$data = [
            'user_id' => 1,
            'room_id' => 1,
            'key' => '123456',
            'status' => 1
];
event(new OpenDoorEvent($data));exit();

  

结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
array(6) {
  ["user_id"]=>
  int(1)
  ["room_id"]=>
  int(1)
  ["key"]=>
  string(6) "123456"
  ["status"]=>
  int(1)
  ["ip"]=>
  string(9) "127.0.0.1"
  ["open_time"]=>
  string(19) "2018-01-30 15:46:24"
}

  

有问题欢迎留言!

posted @   程序生(Codey)  阅读(1887)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示