Laravel 5.7 新特性之引入 Laravel Dump Server 扩展包方便本地开发代码调试

在 Laracon US 2018 大会上 Taylor Otwell 宣布会在 Laravel 5.7 中引入 Laravel Dump Server 扩展包(该扩展包将 Symfony 的 Var-Dump Server 引入 Laravel,用于在开发环境收集 dump() 函数输出,并将其打印到控制台或导出到文件),作为开发环境依赖放到 composer.json 文件的 require-dev 配置项中:

"require-dev": {
    "beyondcode/laravel-dump-server": "~1.0",
    "filp/whoops": "^2.0",
    "fzaninotto/faker": "^1.4",
    "mockery/mockery": "^1.0",
    "nunomaduro/collision": "^2.0",
    "phpunit/phpunit": "^7.0"
},

这样,你就可以在 Laravel 5.7 应用中开箱使用以下 Artisan 命令将打印数据输出到控制台或者 HTML 文件,而不必打开浏览器:

php artisan dump-server

# Or send the output to an HTML file
php artisan dump-server --format=html > dump.html

以上命令会在后台启动 Web 服务器,并监听 dump() 函数,然后将输出发送到控制台/导出到文件。如果没有在控制台运行上述命令,那么 dump() 函数还是按照默认的方式执行,不会受到影响。

Laravel 会持续将一些有用的第三方扩展包引入官方发行版本,例如在 Laravel 5.6 中引入了 nunomaduro/collision,在 Laravel 5.5 中引入了 fideloper/proxy

如果你想在 Laravel 5.6 及以下版本中使用 Laravel Dump Server,需要通过 Composer 安装这个扩展包:

composer require --dev beyondcode/laravel-dump-server

如果希望对其进行自定义配置,可以将其配置文件发布到 config 目录下:

php artisan vendor:publish --provider=BeyondCode\\DumpServer\\DumpServerServiceProvider

该命令会在 config 下新增一个 debug-server.php 配置文件。你可以在该配置文件中配置想要监听的服务器 IP 及端口号,如果是通过 Laradock 作为本地开发环境,需要将 IP 地址替换为 workspace 的容器名方可正常使用。

该扩展包的使用也非常简单,我们在应用的 routes/api.php 文件中定义一个 API 路由:

Route::get('/test', function (Request $request) {
    dump($request->all());
    return [
        'name' => $request->get('name') ? : '学院君',
        'site' => $request->get('site') ? : 'Laravel学院',
    ];
});

如果没有启用 php artisan dump-server 命令,访问 http://dump-server.test/api/test?name=学院君&site=Laravel学院 的话页面显示如下:

下面在项目根目录下运行该命令,再次访问上面的 URL 链接,会看到 dump() 输出打印到了控制台:

laravel dump server

同时浏览器中也不再显示 dump() 输出,而是将返回数组以 JSON 格式输出:

通过该扩展包,我们可以在任意想要调试代码的地方调用 dump() 函数打印数据,而不会影响原本的代码执行,从而极大提高本地开发调试效率。

上一篇: Laravel 5.7 新特性系列之新的 URL 生成语法

下一篇: Laravel 5.7 新特性之优化动态调用 Eloquent 模型导致的错误消息