8

我在 Symfony2 中使用 Twig 的转储功能。我已经按照 Symfony的说明配置了它。

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

有任何想法吗?

4

5 回答 5

9

一点解释

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

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

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

你具体需要做什么

  • 如果未安装,请安装 VarDumper 组件
  • 转到文件: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"
于 2015-03-27T13:40:11.323 回答
1

我有同样的问题,将 memory_limit 增加到 1Gb 并没有帮助。就我而言,我想打电话给

    {{ dump() }} 

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

于 2013-03-13T16:24:23.400 回答
0

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

于 2013-02-16T20:52:37.833 回答
0

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

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

  1. 确保安装了最新版本的 xdebug
  2. 如果这不能解决问题,请尝试增加 PHP 内存限制
于 2014-08-10T19:57:41.367 回答
0

Arkemlar 的答案很好用。

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

于 2019-08-09T12:03:18.577 回答