本文實例講述了Laravel框架實現利用監聽器進行sql語句記錄功能。分享給大家供大家參考,具體如下:
利用監聽器進行sql語句記錄
1、監聽sql語句的事件類已經定義,直接創建監聽器類即可:
# 監聽sqlmake:listener QueryListener --event=Illuminate/Database/Events/QueryExecuted
2、監聽器類代碼
./app/Listeners/QueryListener.php
<?phpnamespace 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程序設計有所幫助。
新聞熱點
疑難解答
圖片精選