利用Laravel事件系统如何实现登录日志的记录详解
本文介绍的是利用Laravel事件系统实现登录日志记录的相关内容,分享出来给大家参考,下面来看看详细的介绍: 明确需求记录一个登录日志,通常需要下列信息:
确立工具明确完需求后,根据每个需求查找自己所需的工具吧。
开工采用Laravel的事件订阅系统来实现,需要实现一个登录事件和一个登录事件监听器。 生成事件和监听器Laravel命令行支持自动生成事件和监听器,在AppProvidersEventServiceProvider中添加需要实现的事件: [
'AppListenersLoginListener',],];
运行命令: 登录事件(Event)回顾下需求,我们的登录事件需要的5点信息,在事件中需要记录这些信息,所以事件设计如下: use IlluminateBroadcastingChannel;use IlluminateQueueSerializesModels; use IlluminateBroadcastingPrivateChannel; use IlluminateFoundationEventsDispatchable; use IlluminateBroadcastingInteractsWithSockets; use AppModelsUser; class LoginEvent /**
/**
/**
/**
/**
public function getUser() public function getAgent() public function getIp() public function getTimestamp() /**
use AppEventsLoginEvent; class LoginListener // handle方法中处理事件 //登录信息 // zhuzhichao/ip-location-zh 包含的方法获取ip地理位置 // jenssegers/agent 的方法来提取agent信息 //插入到数据库 } 这样,监听器就完成了,每次一触发登录事件,就会在数据库中添加一条登录信息。 触发事件通过全局的 guard()->user(),new Agent(),Request::getClientIp(),time()));
...
}
}
队列化监听器有时监听器会进行一些耗时操作,这时应该结合Laravel的队列系统将监听器进行队列化,前提是已经配置了队列并开启了队列处理器。 队列化非常简单,只需监听器实现ShouldQueue接口即可,即: 总结Laravel的事件系统实现起来还是非常优雅的,同一个事件可以很方便的添加各类监听器,且各个监听器之间互不干扰,解耦性非常强。加上队列系统,可以很方便的处理一些后续任务。 好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。 (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |