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

<?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

<?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

<?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输出

$data = [
            'user_id' => 1,
            'room_id' => 1,
            'key' => '123456',
            'status' => 1
];
event(new OpenDoorEvent($data));exit();

结果

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"
}

有问题欢迎留言!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值