Laravel dump() 意外输出

Laravel dump() unexpected output

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

{{ dump('test') }}

产生以下输出:

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

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

首先,Blade翻译了这个...

{{ dump($var) }}

对此:

<?php echo e(dump($var)); ?>

这一直工作得很好,因为 Symfony 的 dump() 助手从未 returned 一个值。但是,他们通过此提交更改了它:https://github.com/symfony/var-dumper/commit/b6d0c8cd9949a5de4e71413e6ffbc2ea9dcb647f#diff-2e42573e053ced723652b17a395226f0

从那时起,dump() 会 return $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 语句。