有点晚了……我很惊讶没有人提到Symfony的VarDumper
组件,Laravel部分地将其包含在dd()
(以及不那么常用的dump()
)实用函数中。
$dumpMe = new App\User([ 'name' => 'Cy Rossignol' ]);
(new Symfony\Component\VarDumper\Dumper\CliDumper())->dump(
(new Symfony\Component\VarDumper\Cloner\VarCloner())->cloneVar($dumpMe)
);
需要一些额外的代码,但是我们可以在控制台中得到漂亮格式化、易于阅读的输出——尤其适用于调试复杂的对象或数组:
App\User {
"name" => "Cy Rossignol"
]
0 => "name"
1 => "email"
2 => "password"
]
0 => "*"
]
... etc ...
}
更进一步,我们甚至可以给输出着色!在项目中添加这个帮助函数可以节省一些打字时间:
function toConsole($var)
{
$dumper = new Symfony\Component\VarDumper\Dumper\CliDumper();
$dumper->setColors(true);
$dumper->dump((new Symfony\Component\VarDumper\Cloner\VarCloner())->cloneVar($var));
}
如果我们在完整的Web服务器(如Apache或Nginx,而不是artisan serve
)后运行应用程序,我们可以稍微修改此函数以将转储器的漂亮输出发送到日志中(通常为storage/logs/laravel.log):
function toLog($var)
{
$lines = [ 'Dump:' ];
$dumper = new Symfony\Component\VarDumper\Dumper\CliDumper();
$dumper->setColors(true);
$dumper->setOutput(function ($line) use (&$lines) {
$lines[] = $line;
});
$dumper->dump((new Symfony\Component\VarDumper\Cloner\VarCloner())->cloneVar($var));
Log::debug(implode(PHP_EOL, $lines));
}
当然,您可以使用以下方式查看日志:
$ tail -f storage/logs/laravel.log
PHP的error_log()
函数适用于快速、一次性地检查简单值,但上面展示的函数可以帮助您调试Laravel更复杂的类,省去了很多繁琐的工作。