【问题标题】:Maximum function nesting when extending twig template for sonata admin为奏鸣曲管理员扩展树枝模板时的最大功能嵌套
【发布时间】:2012-08-14 11:33:33
【问题描述】:

我正在使用以下模板来扩展特定的小部件

{% use 'SonataAdminBundle:Form:form_admin_fields.html.twig' %}
{% form_theme form _self %}
{% block textarea_widget %}
  {% spaceless %}
  <div class="textarea_widget">
    <textarea {{ block('widget_attributes') }}>{{ value|raw }}   
    </textarea>
  </div>
  {% endspaceless %}
{% endblock textarea_widget %}

主要问题是它达到了最大的函数嵌套。扩展模板时必须有一些无限递归。当我从扩展模板复制代码时,一切正常。知道如何使它工作吗?

【问题讨论】:

    标签: symfony twig sonata-admin


    【解决方案1】:

    这可能是由 xDebug 引起的,您必须使用xdebug.max_nesting_level 参数进行配置。默认为 100,但我通常将其升级到 1000 以保持安静。

    在 Debian 上,它位于 /etc/php5/conf.d/xdebug.ini

    关于这个参数的官方文档:

    xdebug.max_nesting_level 类型:整数,默认值:100

    控制无限递归保护的保护机制。 此设置的值是嵌套函数的最大级别 在脚本被中止之前是允许的。

    【讨论】:

    • 您认为增加限制是一个好的解决方案吗?我已经测试过了,1000 仍然不够,10000 也可能。我不相信核心开发人员会犯这样的错误,所以这一定是与模板继承相关的另一个问题
    • 众所周知,当使用带有模板的重型框架时,100 太低了。我将其更改为 1000,因为 Symfony2 在早期版本中存在错误,并且需要高价值的测试。当然,如果你需要更多,看来你有问题......
    【解决方案2】:

    要修复此错误,我需要在 app/Resources/SonataAdmin/views/Form 中创建 form_admin_fields.html.twig 文件,其中包含以下内容:

        {% block textarea_widget %}
        {% spaceless %}
        <div class="textarea_widget">
            <textarea {{ block('widget_attributes') }}>{{ value|raw }}   </textarea>
        </div>
        {% endspaceless %}
        {% endblock %}
    

    所以没有必要使用或扩展模板,只需重新定义一些块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 2012-01-07
      • 1970-01-01
      • 2014-12-04
      • 2018-04-30
      • 2020-01-15
      • 2018-01-03
      相关资源
      最近更新 更多