【问题标题】:Twig's dump function returns a blank screenTwig 的转储函数返回一个空白屏幕
【发布时间】:2013-02-16 18:51:52
【问题描述】:

我在 Symfony2 中使用 Twig 的 dump 函数。我已经按照its instructions配置了Symfony。

我有一个page 变量和一个orders 数组。 dump 适用于页面,但不适用于订单。当我在订单上调用它时,我得到一个白屏 - 没有 php 错误或任何东西。我不知道如何调试它。

有什么想法吗?

【问题讨论】:

  • 您的错误日志中有任何内容吗?您是否启用了 error_reporting?
  • 我不记得了,但我不这么认为。我做的一件事是将数据作为 json 响应返回,然后在检查器中查看它。但我从未发现根本原因。

标签: symfony twig


【解决方案1】:

一点解释

在这种情况下,白色(空白)屏幕表示 PHP 致命错误:允许的内存大小已用完。在调查过程中,我发现 twig 在我安装 VarDumper 组件时使用了var_dump 函数

我认为它可以在未安装 VarDumper 组件的情况下工作,但 symfony 的 VarDumper 组件文档中涵盖的 twig 的 dump() 函数就像一个复杂的解决方案,这很奇怪。

因此,使用 VarDumper 的 dump() 函数而不是原生的 var_dump() 可以解决内存问题(因为 VarDumper 将结果转储收集限制在足够的数量)。 VarDumper 的dump() 也提供了更方便的结果 - 您可以单击树叶来显示/隐藏其内容。

你需要做什么

  • Install VarDumper component 如果未安装
  • 转到文件:vendor/twig/twig/lib/Twig/Extension/Debug.php
  • 查找twig_var_dump函数
  • 将所有var_dump() 调用替换为dump()
  • 删除/评论ob_start() + ob_get_clean()构造(这是需要的 如果您使用var_dump(),因为它会立即回显数据,但dump() 正在执行 更智能)

使用这个复制+替换整个函数:

function twig_var_dump(Twig_Environment $env, $context)
{
    if (!$env->isDebug()) {
        return;
    }

    $count = func_num_args();
    if (2 === $count) {
        $vars = array();
        foreach ($context as $key => $value) {
            if (!$value instanceof Twig_Template) {
                $vars[$key] = $value;
            }
        }

        dump($vars);
    } else {
        for ($i = 2; $i < $count; $i++) {
            dump(func_get_arg($i));
        }
    }

}

PS:问题是在 2013 年提出的,但我希望它有所帮助,因为我现在遇到了这个问题。

我的背景:

"symfony/symfony": "2.5.*"
"symfony/var-dumper": "~2.6"

【讨论】:

  • 你应该在官方 twig 存储库上提出这个改进的拉取请求
  • @Charles-AntoineFournel 这是个好主意,我以后会努力的
  • 在当前状态下,我认为 symfony 3.0.9 具有此功能,因为我在新安装的项目中的 twig 模板中看到了 dump() 函数。
  • @Arkemlar 不幸的是,这仍然发生在 Symfony 4 中——建议的修复确实有帮助。
  • @bleistift2 好吧,看来我们需要做一个失败的测试来解决这个问题并打开 PR。我希望我有时间...
【解决方案2】:

我遇到了同样的问题,将 memory_limit 增加到 1Gb 并没有帮助。 就我而言,我想调用

    {{ dump() }} 

没有参数(在当前模板的上下文中查看所有可用的变量。在我的情况下,以下帮助:https://stackoverflow.com/a/11500141/2166261,尽管 memory_limit 问题仍然存在)

【讨论】:

    【解决方案3】:

    您很可能已达到 PHP 内存限制。尝试在 php.ini 中增加它

    【讨论】:

    • 看来你是对的,但我不明白怎么做。这只是与我的实例数据相关的一种形式 - 我已将限制增加到 200MB,但仍然没有骰子。有什么想法吗?
    【解决方案4】:

    这个问题可能没有单一的答案,因为一系列的事情都可能导致它。正如其他人所建议的那样,增加 PHP 的内存限制可能会有所帮助。在我的情况下,这并没有帮助,但是,我能够通过安装 xdebug 来解决问题。

    到目前为止,解决此问题的清单似乎如下所示:

    1. 确保安装了最新版本的 xdebug
    2. 如果不能解决问题,请尝试增加 PHP 内存限制

    【讨论】:

    • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
    • 这是该问题的潜在答案,因为我遇到了完全相同的问题,这就是它的解决方式。
    【解决方案5】:

    Arkemlar 的答案很好用。

    但是

    在我的情况下,twig dump() 在使用 phpunit 的功能测试中导致了 RuntimeException。

    【讨论】:

    • 如果您有新问题,请点击 按钮提出问题。如果您有足够的声誉,you may upvote 的问题。或者,将其“加注”为收藏夹,您将收到任何新答案的通知。
    猜你喜欢
    • 2017-08-06
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 2018-03-28
    相关资源
    最近更新 更多