032. Dump 调试工具(5.7 新功能)——beyondcode/laravel-dump-server
Dump 调试工具——beyondcode/laravel-dump-server
beyondcode/laravel-dump-server 是一个 Dump 调试工具,它是 Symfony Var-Dump Server 在 Laravel 中的封装。这个扩展包将会作为 Laravel 5.7 开发环境的依赖,写入 composer.json
中,所以 5.7 之后的版本中你就可以直接使用这个扩展包。
但是因它依赖的是 Symfony 4.x
的组件,Laravel 5.5 及以下的版本依赖的是 Symfony 3.x
的组件,所以 Laravel 5.6 之前的所有版本都是无法安装使用这个扩展包。
这节课我们快速创建一个 Laravel 5.7 的项目,来快速看一下这个扩展包会对我们的开发带来什么样的帮助。
安装
如果你使用的是 Laravel 5.6 可以通过 composer require --dev beyondcode/laravel-dump-server
单独安装这个扩展包。
注意这里使用了 --dev
参数,因为这是一个辅助开发的扩展包,生产环境中记得使用 --no-dev
参数过滤开发环境的依赖。
或者可以直接通过 composer create-project --prefer-dist laravel/laravel
创建一个 5.7 的项目。我这里准备好了一个 5.7 的项目:
使用
先来看看我们日常调试中遇到的问题,dd
, dump
和 logger
方法应该是 Laravel 中比较常用的调试方法。
使用 DD
dd
方法使用起来很方便,可以一次打印多个变量,我们测试一下:
routes/web.php
Route::get('/', function () {
dd('foobar', request()->all());
return view('welcome');
});
访问 package57.test/?foo=1&bar=2 测试一下。
dd
方法的问题是代码运行到 dd
的时候进程就会中断,有时候调试多个地方的代码不够方便。
使用 logger
看一眼 logger 方法的源码,其实就是调用 Log::debug
。
vendor/laravel/framework/src/Illuminate/Foundation/helpers.php
function logger($message = null, array $context = [])
{
if (is_null($message)) {
return app('log');
}
return app('log')->debug($message, $context);
}
修改一下调试代码
routes/web.php
Route::get('/', function () {
logger(request()->all());
return view('welcome');
});
如果日志添加在多个地方,有时候会分不清每一行日志是哪添加的,一般可以是第一个参数添加日志描述信息,第二个参数添加具体日志内容,第二个参数需要是个数组。
routes/web.php
Route::get('/', function () {
logger('request data', request()->all());
return view('welcome');
});
或者添加一些开始结束标志:
routes/web.php
Route::get('/', function () {
logger('request data start ====>');
logger('request data', request()->all());
logger('request data end <====');
return view('welcome');
});
使用 dump
尝试一下 dump
方法:
routes/web.php
Route::get('/', function () {
dump(request()->all());
return view('welcome');
});
这时候访问 package57.test/?foo=1&bar=2
我们看到了输出的代码,通常情况下我们都是这么使用,但是在安装了这个扩展包之后,在命令行中运行 php artisan dump-server
,再次访问页面:
页面中已经没有调试信息了,命令行下则可以看到具体的请求,访问日期,调试信息的文件以及行数。
这样当我们在多个地方添加调试信息时:
app/Providers/AppServiceProvider.php
.
.
.
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
dump('start');
}
.
.
.
调试信息就会非常的明确,而且不会对页面或者接口产生任何影响。
代码版本能控制
$ git add -A
$ git commit -m 'beyondcode/laravel-dump-server'