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 AppEvents;

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 AppListeners;

use AppEventsOpenDoorEvent;
use IlluminateQueueInteractsWithQueue;
use IlluminateContractsQueueShouldQueue;

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 AppProviders;

use AppEventsOpenDoorEvent;
use AppListenersOpenDoorListener;
use LaravelLumenProvidersEventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'AppEventsSomeEvent' => [
            'AppListenersEventListener',
        ],
        /*
        'AppEventsOpenDoorEvent' => [
            'AppListenersOpenDoorListener',
        ],
        */
        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"
}

  

有问题欢迎留言!

原文地址:https://www.cnblogs.com/cxscode/p/8385351.html