5

我想覆盖要在树枝中使用的基本寺庙。

我用过这个

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 %}

我需要做更多的改变吗?

4

4 回答 4

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
于 2012-09-03T06:45:49.803 回答
1

要执行您正在尝试的操作,只需将form_div_layout.html.twig复制到没有Form文件夹的资源中,然后在配置中以这种方式引用它:::form_div_layout.html.twig

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

您不必复制所有内容。您只能扩展它的一部分..

于 2013-03-11T09:06:52.803 回答
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"]
于 2013-12-22T03:28:08.777 回答
0

要完全覆盖原始form_div_layout.html.twig模板但不复制整个文件,请执行以下操作

理论:

  1. 为原始文件添加 twig 加载路径(以避免 requrssion)
  2. 选修的。添加显式 form_themes
  3. 将新的“form_div_layout.html.twig”放在默认路径中
  4. 通过 [path] namescpace 从原始文件中扩展新文件

所以。实践

在你的 symfony 树枝配置中放置它:

# symfony/config/packages/twig.yaml
twig:
    default_path: '%kernel.project_dir%/templates'
    # 1 step
    paths:
        - value: '%kernel.project_dir%/../vendor/symfony/twig-bridge/Resources/views/Form/'
          namespace: 'TwigBridge'

    form_themes:
        - '@SonataForm/Form/datepicker.html.twig'
        # 2nd
        - 'form_div_layout.html.twig'

创建新文件symfony dir /templates/form_div_layout.html.twig

# '%kernel.project_dir%/templates'
# OR
# templates/form_div_layout.html.twig*
{#{% extends 'vendor/symfony/twig-bridge/Resources/views/Form/form_div_layout.html.twig' %}#}
{% extends '@TwigBridge/form_div_layout.html.twig' %}

# make override - replace original form widget
{%- block dateinterval_widget -%}
  {{ parent() }}
{%- endblock dateinterval_widget -%}

要进行本地覆盖,请参阅其他答案。

于 2021-12-02T15:09:06.143 回答