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 的项目:

file

使用

先来看看我们日常调试中遇到的问题,dd, dumplogger 方法应该是 Laravel 中比较常用的调试方法。

使用 DD

dd 方法使用起来很方便,可以一次打印多个变量,我们测试一下:

routes/web.php

Route::get('/', function () {
    dd('foobar', request()->all());
    return view('welcome');
});

访问 package57.test/?foo=1&bar=2 测试一下。

file

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');
});

file

使用 dump

尝试一下 dump 方法:

routes/web.php

Route::get('/', function () {
    dump(request()->all());
    return view('welcome');
});

这时候访问 package57.test/?foo=1&bar=2

file

我们看到了输出的代码,通常情况下我们都是这么使用,但是在安装了这个扩展包之后,在命令行中运行 php artisan dump-server,再次访问页面:

file

file

页面中已经没有调试信息了,命令行下则可以看到具体的请求,访问日期,调试信息的文件以及行数。

这样当我们在多个地方添加调试信息时:
app/Providers/AppServiceProvider.php

.
.
.
class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        dump('start');
    }
.
.
.

file

调试信息就会非常的明确,而且不会对页面或者接口产生任何影响。

代码版本能控制

$ git add -A
$ git commit -m 'beyondcode/laravel-dump-server'

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。