Contributed by
Maxime Steinhausser
in #23831.

VarDumper 组件 提供了一个 dump() 函数,作为一个远高于 PHP 的 var_dump() 函数的替代品。从你的程序中剥离出数据,最大的问题在于,例如,对于一个API来说,你可能是在命令行(控制台)中以 “响应的数据和剥离出的数据” 的混合体作为结束。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class ApiController extends AbstractController
{
    /**
     * @Route("/hello")
     */
    public function hello(Request $request, UserInterface $user)
    {
        dump($request->attributes, $user);
 
        return JsonResponse::create([
            'status' => 'OK',
            'message' => "Hello {$user->getUsername()}"
        ]);
    }
}

在这个例子中,命令行的输出是令人迷惑的:

为了解决这些问题,在 Symfony 4.1 中我们引入了 一个专用的服务器来收集 dumped data(剥离出的数据)。实践中你只需运行全新的 server:dump 命令,则任何时候当你调用 dump() 时,剥离出的数据会被发送到一个独立的中央服务器,再显示到命令行或存为 HTML 文件:

1
2
3
4
5
 ./bin/console server:dump
  [OK] Server listening on tcp://0.0.0.0:9912
 
 
 ./bin/console server:dump --format=html > dump.html

下面是这个server在剥离出数据到命令行中时的样子 (其包含了上下文信息,诸如 源文件、HTTP 请求、已执行的命令等):

下面是使用 HTML 格式时服务器的样子:

在 Symfony 程序中使用时,这个新 server 被配置在 debug 包中:

1
2
3
# config/packages/dev/debug.yaml
debug:
    dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%"