使用 Laravel 5.5.34,我无法使用 dump() 帮助程序在 Blade 模板中输出调试信息。
{{ dump('test') }}
导致以下输出:
我不希望原始字符串“test”显示在实际调试输出下方。这是正常行为吗?如果是,我该如何禁用它?如果不是,什么配置错误会导致它?
最佳答案
深入挖掘,我找到了问题的根源。
首先,Blade 翻译了这个……
{{ dump($var) }}
对此:
<?php echo e(dump($var)); ?>
这一直很有效,因为 Symfony 的 dump() 助手从未返回值。然而,他们通过这个提交改变了这一点:https://github.com/symfony/var-dumper/commit/b6d0c8cd9949a5de4e71413e6ffbc2ea9dcb647f#diff-2e42573e053ced723652b17a395226f0
从那以后, dump() 确实返回
$var
!因为 Laravel 使用了前面提到的 symfony/var-dumper 的 dump() 助手,所以 e() 现在会突然从 dump() 接收
$var
。这是 Laravel 中使用的 e() 辅助函数:
function e($value, $doubleEncode = false)
{
if ($value instanceof Htmlable) {
return $value->toHtml();
}
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8', $doubleEncode);
}
如果
$var
是字符串类型,这会导致双输出,如果不是,则抛出异常,因为 htmlspecialchars() 只接受字符串作为第一个参数。解决方案是创建我自己的转储助手,它不包含您可以在差异中看到的 return 语句。
关于php - Laravel dump() 意外输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48731507/