Twig的转储功能返回一个空白屏幕

时间:2013-02-16 18:51:53

标签: symfony twig

我在Symfony2中使用Twig的dump函数。我已根据its instructions配置了Symfony。

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

有什么想法吗?

5 个答案:

答案 0 :(得分:7)

一点解释

在这种情况下,白色(空白)屏幕表示PHP致命错误:允许的内存大小耗尽。在调查期间,我发现了一些奇怪的事情: twig使用var_dump函数,而我安装了VarDumper组件。

我认为如果没有安装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()会起作用 更聪明)

OR

使用此复制+替换整个函数;)

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

//    ob_start();

    $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));
        }
    }

//    return ob_get_clean();
}
PS:问题是在2013年问的,但我希望它有所帮助,因为我现在遇到了这个问题。

我的背景:

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

答案 1 :(得分:2)

我有同样的问题,将memory_limit增加到1Gb并没有帮助。 在我的情况下,我想打电话给

    {{ dump() }} 

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

答案 2 :(得分:0)

您很可能达到了PHP内存限制。尝试在php.ini

中增加它

答案 3 :(得分:0)

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

到目前为止,似乎解决此问题的清单看起来像这样:

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

答案 4 :(得分:0)

Arkemlar的答案很好。

但是

在那之后,在我的案例中,twig dump()在使用phpunit的功能测试中导致了RuntimeException。