内容简介:Laravel 打印请求过程中的所有 SQL
说明
在项目开发中,有时需要打印 SQL 进行调试,下面介绍打印SQL的方式。
打印单条SQL
DB::enableQueryLog();
DB::getQueryLog();
打印请求过程中的SQL
在AppServiceProvider.php 的 boot 方法加入以下代码即可:
if (config('app.env') === 'local') {
DB::connection()->enableQueryLog();
Event::listen(RequestHandled::class, function ($event) {
if ($event->request->input('sql_debug')) {
$queries = DB::getQueryLog();
if (!empty($queries)) {
foreach ($queries as &$query) {
$query['full_query'] = vsprintf(str_replace('?', '%s', $query['query']), $query['bindings']);
}
}
dd($queries);
}
});
}
使用
在请求参数中增加 sql_debug ,参数值为 true 时即可打印出请求过程中的所有 SQL 了。
原理
在 kernel.php 的 handle 方法中,处理完成请求后,会 dispatch RequestHandled 事件,所以通过监听这个请求完成的事件就可以了。
下面是 handle 方法:
/**
* Handle an incoming HTTP request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function handle($request)
{
try {
$request->enableHttpMethodParameterOverride();
$response = $this->sendRequestThroughRouter($request);
} catch (Exception $e) {
$this->reportException($e);
$response = $this->renderException($request, $e);
} catch (Throwable $e) {
$this->reportException($e = new FatalThrowableError($e));
$response = $this->renderException($request, $e);
}
$this->app['events']->dispatch(
new Events\RequestHandled($request, $response)
);
return $response;
}
那为什么要在 AppServiceProvider 中配置呢
Application.php 构造函数如下:
/**
* Create a new Illuminate application instance.
*
* @param string|null $basePath
* @return void
*/
public function __construct($basePath = null)
{
if ($basePath) {
$this->setBasePath($basePath);
}
$this->registerBaseBindings();
$this->registerBaseServiceProviders();
$this->registerCoreContainerAliases();
}
注册配置文件中的 服务提供器,代码如下:
/**
* Register all of the configured providers.
*
* @return void
*/
public function registerConfiguredProviders()
{
(new ProviderRepository($this, new Filesystem, $this->getCachedServicesPath()))
->load($this->config['app.providers']);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- HTTP完整请求过程
- HTTP请求的整个过程
- django从请求到响应的过程
- Express 源码分析1-(服务启动和请求服务过程)
- dubbo源码解析(四十六)消费端发送请求过程
- Tomcat源码分析 (八)----- HTTP请求处理过程(一)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python基础教程
[挪] Magnus Lie Hetland / 袁国忠 / 人民邮电出版 / 2018-2-1 / CNY 99.00
本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基本概念,包括列表、元组、字符串、字典以及各种语句;然后循序渐进地介绍了一些相对高级的主题,包括抽象、异常、魔法方法、属性、迭代器;此后探讨了如何将Python与数据库、网络、C语言等工具结合使用,从而发挥出Python的强大功能,同时介绍了Python程序测试、打包、发布等知识;最后,作者结合......一起来看看 《Python基础教程》 这本书的介绍吧!