Laravel框架实现利用监听器进行sql语句记录功能


Posted in PHP onJune 06, 2018

本文实例讲述了Laravel框架实现利用监听器进行sql语句记录功能。分享给大家供大家参考,具体如下:

利用监听器进行sql语句记录

1、监听sql语句的事件类已经定义,直接创建监听器类即可:

# 监听sql
make:listener QueryListener --event=Illuminate\Database\Events\QueryExecuted

2、监听器类代码

./app/Listeners/QueryListener.php

<?php
namespace App\Listeners;
use Illuminate\Database\Events\QueryExecuted;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Http\Models\OperationLog;
class QueryListener
{
  /**
   * Create the event listener.
   *
   * @return void
   */
  public function __construct()
  {
    //
  }
  /**
   * Handle the event.
   *
   * @param QueryExecuted $event
   * @return void
   */
  public function handle(QueryExecuted $event)
  {
    $sql = str_replace("?", "'%s'", $event->sql);
    $log = vsprintf($sql, $event->bindings);
    # 此处$uid定义是依赖于中间件记录操作日志代码
    $uid = isset($_SERVER['admin_uid']) ? $_SERVER['admin_uid'] : 0;
    if('select' != substr($log , 0 , 6)){
      if('insert into `operationLog`' != substr($log , 0 , 26)){
        $OperationLog = new OperationLog();
        $OperationLog->uid = $uid;
        $OperationLog->sql = $log;
        $OperationLog->input = '';
        $OperationLog->save();
      }
    }
  }
}

3、引入监听器

./app/Providers/EventServiceProvider.php

protected $listen = [
    ...
    \Illuminate\Database\Events\QueryExecuted::class => [
      'App\Listeners\QueryListener'
    ],
    ...
  ];

此时进行操作时就会记录sql日志

相关文章:

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
一棵php的类树(支持无限分类)
Oct 09 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
PHP Curl多线程原理实例详解
Nov 06 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
对PHP新手的一些建议(PHP学习经验总结)
Aug 20 PHP
PHP浮点数的一个常见问题
Mar 10 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
Oct 14 PHP
PHP替换Word中变量并导出PDF图片的实现方法
Nov 26 PHP
php字符串倒叙
Apr 01 PHP
Laravel框架实现利用中间件进行操作日志记录功能
Jun 06 #PHP
PHP实现的curl批量请求操作示例
Jun 06 #PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
Jun 06 #PHP
Yii 访问 Gii(脚手架)时出现 403 错误
Jun 06 #PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 #PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 #PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 #PHP
You might like
php smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
python中map、any、all函数用法分析
2015/04/21 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
Python 文件数据读写的具体实现
2020/01/24 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
HTML5实现移动端弹幕动画效果
2019/08/01 HTML / CSS
国贸专业的职业规划范文
2014/01/23 职场文书
生物制药专业求职信
2014/03/11 职场文书
检查机关党的群众路线个人整改措施
2014/10/04 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS