Symfony2 twig覆盖自定义块下的提交块

时间:2015-02-23 16:47:44

标签: forms symfony twig override

我使用此树枝模板关联制作了自定义表单类型:

{% block date_filter_widget %}
  {% spaceless %}
    <div class="input-daterange input-group js-datepicker">
        {{ form_widget(form.fromDate) }}
        <span class="input-group-addon">to</span>
        {{ form_widget(form.toDate) }}
        OVERRIDE THE SUBMIT BLOCK HERE
    </div>
   {% endspaceless %}
{% endblock %}

我想覆盖此自定义字段/块的提交按钮的模板。

我已经尝试将block submit放在此块中,但这样一来,任何提交块都会被覆盖(即使它们不是date_filter_widget)。另一种方法是手动创建提交按钮(并传递属性),但这样我并没有真正覆盖表单的提交按钮(所以我最终会遇到其他问题)。

我还看到了一个解决方案,建议block submit中的if / else检查小部件前缀是否与我的自定义类型名称匹配,但它看起来有点像黑客,而不是正确的覆盖。

1 个答案:

答案 0 :(得分:0)

在该块中,我添加了{{ block('date_submit_widget') }}

然后制作了一个自定义提交块,如:

{%- block date_submit_widget -%}
{%- set type = type|default('submit') -%}
{% set attr = attr|merge({class: (attr.class|default('') ~ ' btn btn-primary')|trim}) %}
<span class="input-group-btn">
    <button type="{{ type|default('button') }}" name="{{full_name}}_filter" {{ block('button_attributes') }}>
        <span class="glyphicon glyphicon-filter"></span>
    </button>
</span>
{%- endblock date_submit_widget -%}

我遗漏的重要部分是<button>需要一个name属性,它不应该保留在其他输入字段的相同数组中,否则验证将失败