首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel dump()意外输出

Laravel dump()意外输出
EN

Stack Overflow用户
提问于 2018-02-11 20:32:21
回答 1查看 6.4K关注 0票数 4

使用Laravel 5.5.34,我在使用dump()助手在Blade模板中输出调试信息时遇到了问题。

代码语言:javascript
复制
{{ dump('test') }}

将产生以下输出:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-11 21:58:05

再深入一点,我找到了问题的根源。

首先,刀锋翻译这个...

代码语言:javascript
复制
{{ dump($var) }}

要这样做:

代码语言:javascript
复制
<?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函数:

代码语言:javascript
复制
function e($value, $doubleEncode = false)
{
    if ($value instanceof Htmlable) {
        return $value->toHtml();
    }

    return htmlspecialchars($value, ENT_QUOTES, 'UTF-8', $doubleEncode);
}

如果$var是字符串类型,这会导致双重输出,如果不是,则会抛出异常,因为htmlspecialchars()只接受字符串作为第一个参数。

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48731507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档