当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2018-11-07 12:29:39 浏览: 评论:0 

本文实例讲述了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.       } //phpfensi.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日志。

Tags: Laravel 监听器

分享到: