使用Laravel 5.5.34,我在使用dump()助手在Blade模板中输出调试信息时遇到了问题。
{{ dump('test') }}将产生以下输出:

我不希望原始字符串"test“出现在实际调试输出的下方。这是正常行为吗?如果是,我如何禁用它?如果不是,是什么配置错误导致的?
发布于 2018-02-11 21:58:05
再深入一点,我找到了问题的根源。
首先,刀锋翻译这个...
{{ dump($var) }}要这样做:
<?php echo e(dump($var)); ?>这一直都很好用,因为Symfony的dump() helper从未返回值。然而,他们通过这个提交改变了这一点:https://github.com/symfony/var-dumper/commit/b6d0c8cd9949a5de4e71413e6ffbc2ea9dcb647f#diff-2e42573e053ced723652b17a395226f0
从那时起,dump()确实返回了$var!
因为Laravel使用来自symfony/var-dumper的前面提到的$var () helper,所以e()现在会突然收到从dump()返回的转储。
这是Laravel中使用的e() helper函数:
function e($value, $doubleEncode = false)
{
if ($value instanceof Htmlable) {
return $value->toHtml();
}
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8', $doubleEncode);
}如果$var是字符串类型,这会导致双重输出,如果不是,则会抛出异常,因为htmlspecialchars()只接受字符串作为第一个参数。
解决方案是创建我自己的转储助手,它不包含您可以在diff中看到的return语句。
https://stackoverflow.com/questions/48731507
复制相似问题