Symfony 2.1和Twig中导致“最大函数嵌套级别”错误的原因是什么?

时间:2012-11-03 20:51:20

标签: symfony twig

我有一个关于Symfony 2.1的项目。更新作曲家组件(Gedemo,Symfony核心,Doctrine,Twig等)后,我有以下错误:

Fatal error: Maximum function nesting level of '100' reached, aborting! in /var/www/{path}/vendor/twig/twig/lib/Twig/Token.php on line 78

我有PHP 5.4。什么可能导致此错误?

5 个答案:

答案 0 :(得分:52)

找到xdebug.ini文件:

$ locate xdebug.ini
/etc/php5/conf.d/20-xdebug.ini
/etc/php5/mods-available/xdebug.ini

在我的情况下,文件是/etc/php5/conf.d/20-xdebug.ini。打开它并添加以下行:

xdebug.max_nesting_level = 1000

不要忘记重启FPM服务器。

答案 1 :(得分:2)

它是一个导致无限循环的错误代码,但它偶尔会发生没有错误的处理超过100个调用嵌套函数。

要更正此问题,请打开php.ini,xdebug部分并添加以下行(将您想要的内容替换为150)

 [xdebug]
xdebug.max_nesting_level = 150

答案 2 :(得分:1)

向新的Twig开发人员分享一些提示,他们可能有兴趣了解问题的“导致什么......”。

显然在最初的问题中,最大嵌套级别相当低(100),正如一些评论所提到的,对于正常情况,它可能太低了。

但是,如果按照上面的建议将级别提高到256,512甚至1000,并且仍然遇到相同的错误,则可能最有可能看到的是the template inheritance。 (模板第一行的extends个关键字)

对于您在多个位置拥有模板的项目尤其如此。

想象一个示例项目结构:

── plugins
   ├── your-plugin
   |   ├── views
   |   │   ├── base.twig
   │   │   ├── special-element.twig
   │   │   ├── some-other-element.twig
── theme
   ├── base.twig
   ├── index.twig
   ├── sub-page.twig

插件有一个模板base.twig,它扩展了主题下的base.twig。但是,如果未正确配置模板位置,模板可能会一次又一次地自我扩展,从而导致无限循环。

如何检查是否是这种情况?我很高兴听到更准确的解决方案,但是可以启动 - 仅用于调试目的 - 就像使用完整服务器路径引用父模板一样简单:

{% extends "/var/www/path-to-your-template/" %}

如果它开始使用绝对路径,那么您可以确定模板路径有问题。在此处阅读更多相关信息:Twig Template Naming and Locations

答案 3 :(得分:0)

如果增加xdebug.max_nesting_level = 1000失败检查命名空间是正确的

例如:namespace App\Entities;,但文件夹名称为小写app

然后实体应该将名称空间包含为namespace app\Entities;

答案 4 :(得分:-2)

就我而言,我必须将 php.ini 中PHP使用的内存量增加到512MB。此外,我在站点根文件夹上进行了作曲家更新,以更新Symfony生成的默认设置。