0:释义
什么是服务容器
简而言之,Laravel 服务容器 是一个用于存储绑定组件的盒子,它还会为应用提供所需的服务。
Laravel 服务容器是用于管理类的依赖和执行依赖注入的工具,By Laravel 文档。
什么是服务提供者
如果说服务容器是提供绑定和依赖注入的的工具,那么 服务提供者 则是实现绑定的工具。
1:自定义服务提供者
php artisan make:provider SqlDebugServiceProvider
# Explanation:
# SqlDebugServiceProvider 自定义服务提供者的名字
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class SqlDebugServiceProvider extends ServiceProvider
{
/**
* Register services.
* register 方法用于执行服务绑定处理
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
* 可以使用所有已绑定的服务
*
* @return void
*/
public function boot()
{
//
}
}
2:注册自定义服务提供者
为了完成注册服务提供者的功能,仅需要将类名加入到 config/app.php 配置文件的 providers 节点。
'providers' => [
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
/**
* SQL 监听服务
*/
App\Providers\SqlDebugServiceProvider::class,
],
3: 在 中 boot 方法中增加 SQL 监听服务
\DB::listen(function ($query) {
$tmp = str_replace('?', '"' . '%s' . '"', $query->sql);
$qBindings = [];
foreach ($query->bindings as $key => $value) {
if (is_numeric($key)) {
$qBindings[] = $value;
} else {
$tmp = str_replace(':' . $key, '"' . $value . '"', $tmp);
}
}
$tmp = vsprintf($tmp, $qBindings);
$tmp = str_replace("\\", "", $tmp);
\Log::debug('[execution time: ' . $query->time . 'ms] ' . $tmp);
});
4: 会发现在 /storage/logs/ 目录下生成对应的 SQL 文件
声明
本人博客的所有东西,部分源于网络书籍和视频,其他的是个人的理解感悟,经过自己整理撰写成博客。
本人博客均只用于个人学习、复习,不作为商业用途,如有侵权,请联系我修改或删除。
联系邮箱:itlaowen@163.com