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