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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?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输出
1 2 3 4 5 6 7 | $data = [ 'user_id' => 1, 'room_id' => 1, 'key' => '123456' , 'status' => 1 ]; event( new OpenDoorEvent( $data )); exit (); |
结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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" } |
有问题欢迎留言!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!