zoukankan      html  css  js  c++  java
  • 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"
    }
    

      

    有问题欢迎留言!

  • 相关阅读:
    Sublime Text 3065
    FBX .NET
    macbook pro的usb串口失效的的处理方法
    CMAKE使用
    Ctrl+Scroll改变所有Editor的缩放比例 (Code::Blocks)
    如何在Mac OSX 10.10上安装GDB
    yum安装指定(特定)版本(旧版本)软件包的方法
    MinGW: TOO MANY SECTIONS issue
    轻量级Image Library
    CodeLite的姿势
  • 原文地址:https://www.cnblogs.com/cxscode/p/8385351.html
Copyright © 2011-2022 走看看