如何覆盖“form_div_layout”基本模板?

时间:2012-09-03 06:35:21

标签: php forms symfony

我想覆盖在树枝中使用的基本文件。

我用过这个

twig:
    form:
        resources:
            - 'form_div_layout.html.twig'

我将文件从原始位置复制到 app/resources/views/Form/form_div_layout.html.twig但我仍然无法看到模板渲染的变化。

基本上我只想在生成的DIV框中添加类

{% block form_widget_compound %}
{% spaceless %}
    <div class="MYCLASS" 
    {{ block('widget_container_attributes') }}>
        {% if form.parent is empty %}
            {{ form_errors(form) }}
        {% endif %}
        {{ block('form_rows') }}
        {{ form_rest(form) }}
    </div>
{% endspaceless %}
{% endblock form_widget_compound %}

我是否需要进行更改?

3 个答案:

答案 0 :(得分:9)

如果您只想自定义一个字段,则无需复制完整文件。这样做:

如果您只想为一个模板执行此操作,请将其添加到模板中:

{% form_theme form _self %}

{% block form_widget_compound %}
{% spaceless %}
    <div class="MYCLASS" >
    {{ block('widget_container_attributes') }}>
        {% if form.parent is empty %}
            {{ form_errors(form) }}
        {% endif %}
        {{ block('form_rows') }}
        {{ form_rest(form) }}
    </div>
{% endspaceless %}
{% endblock form_widget_compound %}

如果要在多个模板中自定义此功能,请执行以下操作:使用以下代码在捆绑包中创建模板文件:

{# src/Acme/DemoBundle/Resources/views/Form/fields.html.twig #}
{% block form_widget_compound %}
{% spaceless %}
    <div class="MYCLASS" >
    {{ block('widget_container_attributes') }}>
        {% if form.parent is empty %}
            {{ form_errors(form) }}
        {% endif %}
        {{ block('form_rows') }}
        {{ form_rest(form) }}
    </div>
{% endspaceless %}
{% endblock form_widget_compound %}

然后,在要使用此自定义字段的模板中,执行:

{% form_theme form 'AcmeDemoBundle:Form:fields.html.twig' %}

如果您希望此自定义在捆绑包的所有模板中可用,请将其添加到配置文件中:

# app/config/config.yml
twig:
    form:
        resources:
            - 'AcmeDemoBundle:Form:fields.html.twig'

如果您希望此选项可用于所有捆绑包,请将此文件复制到

app/Resources/AcmeDemoBundle/views/Form/fields.html.twig

答案 1 :(得分:1)

要在没有表单文件夹的资源中执行您正在尝试复制 form_div_layout.html.twig 的内容,然后在配置中以这种方式对其进行复制:: :form_div_layout.html.twig

twig:
    form:
        resources:
            - '::form_div_layout.html.twig'

您无需复制所有内容。你只能扩展它的一部分..

答案 2 :(得分:0)

这里简单明了。要仅覆盖某些块应用程序范围必须使用与form_div_layout.html.twig不同的文件名,否则您将收到错误。如果您复制整个文件并进行更改,这不是问题。但是如果你只想覆盖一些块,你就是这样做的:

创建文件app/Resources/views/forms.html.twig并粘贴您要自定义的块。只要文件名 form_div_layout.html.twig,文件名就不重要。

接下来将其添加到app/config/config.yml

中的树枝配置中
# app/config/config.yml
twig:
    form:
        resources: ["::forms.html.twig"]