Symfony2和Twig:{{dump()}}导致内置服务器崩溃

时间:2014-12-19 10:09:00

标签: symfony twig

我正在使用symfony 2.5.8,当通过命令{{dump(whatever)}}在twig中转储vars时,我的计算机冻结了,过了一会儿我从控制台得到一个错误页面和以下错误我启动了内置服务器(使用-v选项):

Killed
Built-in server terminated unexpectedly

有没有人遇到过同样的问题?有谁知道可能是什么原因?

我已将以下内容添加到app/config/config_dev.yml

中的配置中
services:
    custom.twig.extension.debug:
        class: Twig_Extension_Debug
        tags:
            - { name: 'twig.extension' }

提前致谢!

4 个答案:

答案 0 :(得分:2)

如果您要转储的变量引用Doctrine2实体,则这是一种常见行为。

根据Twig的文档,dump使用本机var_dump函数:

  

在内部,Twig使用PHP var_dump函数。

http://twig.sensiolabs.org/doc/functions/dump.html

另一方面,Doctrine2文档说你不能只是var_dump一个实体:

  

延迟加载代理总是包含Doctrine的EntityManager及其所有依赖项的实例。因此,var_dump()可能会转储一个非常大的递归结构,这种结构无法呈现和读取。您必须使用Doctrine \ Common \ Util \ Debug :: dump()将转储限制为人类可读的级别。此外,您应该知道将EntityManager转储到浏览器可能需要几分钟,而Debug :: dump()方法只是忽略它在Proxy实例中出现的任何情况。

http://doctrine-orm.readthedocs.org/en/latest/tutorials/getting-started.html?highlight=var_dump

作为一种解决方案,您可以编写一个使用Doctrine2的Doctrine\Common\Util\Debug::dump()方法转储实体的Twig扩展。

答案 1 :(得分:1)

如果内存不足并且已经安装了xdebug模块,则可以在php.ini文件中设置选项xdebug.max_nesting_level = 100

这将截断转储的输出,并将帮助您调试高度嵌套的对象,如具有关系的doctrine实体

答案 2 :(得分:1)

从Symfony 2.6开始,您可以使用VarDumper组件dump()任何对象。

您应该使用扩展名覆盖Twig的{{ dump() }}(替换您的名称空间):

FUZ /的appbundle /枝条/扩展/ DebugExtension.php

<?php

namespace Fuz\AppBundle\Twig\Extension;

class DebugExtension extends \Twig_Extension
{

    public function getFunctions()
    {
        return array (
              new \Twig_SimpleFunction('dump', array('Symfony\Component\VarDumper\VarDumper', 'dump')),
        );
    }

    public function getName()
    {
        return 'FuzAppBundle:Debug';
    }

}

FUZ /的appbundle /资源/配置/ services.yml

app.twig.debug_extension:
     class: %app.twig.debug_extension.class%
     arguments: []
     tags:
         - { name: twig.extension }

enter image description here

答案 3 :(得分:0)

Symfony刚刚发布var-dumper,我建议在PHP脚本中使用此功能进行var转储。 Sitepoint中有一篇文章:http://www.sitepoint.com/var_dump-introducing-symfony-vardumper/