Laravel dump()意外输出

时间:2018-02-11 12:32:21

标签: php laravel-5.5

使用Laravel 5.5.34,我无法使用dump()帮助程序在Blade模板中输出调试信息。

{{ dump('test') }}

产生以下输出:

screenshot

我不希望原始字符串“test”显示在实际调试输出之下。这是正常行为,如果是,我该如何禁用它?如果不是,错误配置会导致什么?

1 个答案:

答案 0 :(得分:3)

深入挖掘,我找到了问题的根源。

首先,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()只接受字符串作为第一个参数。

解决方案是创建我自己的转储助手,它不包含你可以在diff中看到的return语句。