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)%" |