首页 > 开发 > PHP > 正文

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

2024-05-04 21:50:45
字体:
来源:转载
供稿:网友

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

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

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

# 监听sql

make:listener QueryListener --event=Illuminate/Database/Events/QueryExecuted

2、监听器类代码

./app/Listeners/QueryListener.php

  1. <?php 
  2. namespace App/Listeners; 
  3. use Illuminate/Database/Events/QueryExecuted; 
  4. use Illuminate/Queue/InteractsWithQueue; 
  5. use Illuminate/Contracts/Queue/ShouldQueue; 
  6. use App/Http/Models/OperationLog; 
  7. class QueryListener 
  8.   /** 
  9.    * Create the event listener. 
  10.    * 
  11.    * @return void 
  12.    */ 
  13.   public function __construct() 
  14.   { 
  15.     // 
  16.   } 
  17.   /** 
  18.    * Handle the event. 
  19.    * 
  20.    * @param QueryExecuted $event 
  21.    * @return void 
  22.    */ 
  23.   public function handle(QueryExecuted $event
  24.   { 
  25.     $sql = str_replace("?""'%s'"$event->sql); 
  26.     $log = vsprintf($sql$event->bindings); 
  27.     # 此处$uid定义是依赖于中间件记录操作日志代码 
  28.     $uid = isset($_SERVER['admin_uid']) ? $_SERVER['admin_uid'] : 0; 
  29.     if('select' != substr($log , 0 , 6)){ 
  30.       if('insert into `operationLog`' != substr($log , 0 , 26)){ 
  31.         $OperationLog = new OperationLog(); 
  32.         $OperationLog->uid = $uid
  33.         $OperationLog->sql = $log
  34.         $OperationLog->input = ''
  35.         $OperationLog->save(); 
  36.       } //Vevb.com 
  37.     } 
  38.   } 

3、引入监听器

./app/Providers/EventServiceProvider.php

  1. protected $listen = [ 
  2.     ... 
  3.     /Illuminate/Database/Events/QueryExecuted::class => [ 
  4.       'App/Listeners/QueryListener' 
  5.     ], 
  6.     ... 
  7.   ]; 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表