我有一个关于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。什么可能导致此错误?
答案 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生成的默认设置。