今天需要实现日志功能,所有使用了一下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"
}

  

有问题欢迎留言!

lumen 事件的更多相关文章

  1. lumen

    HTTP路由 基本路由 路由参数 必填参数 可选参数 正则表达式约束 命名路由 路由组 中间件 命令空间 路由前缀 基本路由 你可以在 route/web.php 文件中定义应用程序的全部路由.最基本 ...

  2. JNI详解---从不懂到理解

    转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...

  3. Lumen 使用事件需要注意的事项

    Lumen 版本 5.2 参考手册 laravel event 需要注意的事项 如果是第一次在lumen下使用事件,需要修改bootstrap\app.php文件 添加对EventServicePro ...

  4. 简单易懂的laravel事件,这个功能非常的有用(监听事件,订阅者模式)

    先说一下在什么场景会使用这个事件功能. 事情大概是这样的,需求要在用户注册的时候发一些帮助邮件给用户(原本用户在注册之后已经有发别的邮件的了,短信,IM什么的) 原来这个注册的方法也就10多行代码.但 ...

  5. Lumen开发:结合Redis实现消息队列(3)

    4.运行队列监听器 开启任务监听器 Lumen包含了一个Artisan命令用来运行推送到队列的新任务.你可以使用queue:listen命令运行监听器: php artisan queue:liste ...

  6. LaravelS - 基于Swoole加速Laravel/Lumen

    LaravelS LaravelS是一个胶水项目,用于快速集成Swoole到Laravel或Lumen,然后赋予它们更好的性能.更多可能性.Github 特性 内置Http/WebSocket服务器 ...

  7. Jquery的点击事件,三句代码完成全选事件

    先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  8. 关于 Chrome 浏览器中 onresize 事件的 Bug

    我在写插件时用到了 onresize 事件,在反复地测试后发现该事件在 Chrome 及 Opera(内核基本与 Chrome 相同,以下统称 Chrome)浏览器打开时就会执行,这种情况也许不能算作 ...

  9. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

随机推荐

  1. 利用JS实现在li中添加或删除class属性

    $( function() { $("#test li").click(function(){ $("#test li").removeClass(" ...

  2. 向Solr数据集提交Json格式数据(Scala,Post)

    import scalaj.http.Http class SolrAdd () {// 方法接受两个参数,dataType为数据集名称,jsonString为数据json字符串 def postTo ...

  3. Netty4 ServerBootstrap 初始化channelFactory ReflectiveChannelFactory

    只需要在启动之前传入你需要用的channel类型就可以了. ServerBootstrap初始化channelFactory过程: 最后我们再来看看这个channelFactory的使用场景:

  4. Digg工程师讲述Digg背后的技术

    虽然最近业绩有所下滑,也出现了一些技术故障,但Digg作为首屈一指的社会化新闻网站,其背后的技术还是值得一探,Digg工程师 Dave Beckett 在今年4月份写一篇名为<How Digg ...

  5. Python——学好Python必读的几篇文章

    作为脚本语言Python上手容易,但要学好Python能写出一手漂亮的.Pythonic的Python代码并非一日之功,本文的目的在于推荐 一些优秀的Python相关的文章(至于书大家可以看dip.l ...

  6. C/C++ linux下光标定位和清屏函数

    printf("\033[47;31mhello world\033[5m"); 47是字背景颜色, 31是字体的颜色, hello world是字符串.  后面的\033[5m是 ...

  7. 5.触摸touch,单点触摸,多点触摸,触摸优先和触摸事件的吞噬

     1 触摸 Coco2dx默认仅仅有CCLayer及其派生类才有触摸的功能. 2 单点触摸 打开触摸开关和触摸方式 setTouchEnabled(true); setTouchMode(kCCT ...

  8. 更改字段、添加字段脚本以及sql回滚

    --修改字段名称 EXEC sp_rename '[dbo].[SysMenu].[Type]', 'Position', 'COLUMN' --添加字段 alter table [dbo].[Age ...

  9. mongoDB id 导出,dump,sed,count,mysql import等用法示例

    #count collectiondb.news.count({"lpublishtime":{"$gte":1358697600000}}); #mongo导 ...

  10. event.returnvalue = false的使用

    event.returnvalue false代表不接收事件返回值 <script language="JavaScript"> //Ctrl+s保存 document ...