微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – symfony2 / twig:如何在表单主题中使用的块中使用include?

为了处理我的表单集合,我有一个用于块集合小部件的自定义表单主题.此块集合窗口小部件呈现为表,因此取决于block_collection_header和block_collection_body.

块集合小部件始终保持不变,但有时我自定义其他两个块,块集合头和块集合体

我的工作代码

{# From file myview.html.twig #}
{% form_theme form ':Model:prototype_table_collection.html.twig' %}
{% form(form) %}

Ant这个表单主题如下:

{# From file ':Model:prototype_table_collection.html.twig' #}
{% block collection_widget %}
    {% spaceless %}
        <div class="collection">
            {% if prototype is defined %}
                {% set body = prototype %}
                {% set attr = attr|merge({'data-prototype': block('collection_body') }) %}
                {% set header = prototype %}
                {% set attr = attr|merge({'data-header': block('collection_header') }) %}
            {% endif %}

            {% if form.vars.allow_delete is defined and form.vars.allow_delete %}
                {% set allow_delete = true %}
            {% else %}
                {% set allow_delete = false %}
            {% endif %}


            <div {{ block('widget_container_attributes') }} class="protoype">
                {{ form_errors(form) }}
                <table class="subtable table">
                    <thead>
                        <tr class="headers" style="display: none;">
                            {% if form.children|length > 0 %}
                                {% if form.children[0]|length > 0 %}
                                    {% set header = form.children[0] %}
                                    {{ block('collection_header') }}
                                {% endif %}
                            {% endif %}
                        </tr>
                    </thead>
                    <tbody class="container_rows">

                    {% for rows in form %}
                    {% spaceless %}
                        {% if rows.children|length > 0 %}
                                {% set body = rows %}
                                {{ block('collection_body') }}
                        {% endif %}
                    {% endspaceless %}
                    {% endfor %}

                    </tbody>
                </table>
                {% if prototype is defined %}
                    {% if form.vars.attr['data-add_label'] is defined %}
                        {% set add_label = form.vars.attr['data-add_label'] ~ ' ' %}
                    {% else %}
                        {% set add_label = 'Ajouter  ' %}
                    {% endif %}
                    <a href="#/" class="add_button btn btn-default btn-sm pull-right">{{ add_label }}<i class="fa fa-plus"></i></a>
                {% endif %}
                <br>
            </div>
        </div>
    {% endspaceless %}
{% endblock collection_widget %}

{% block collection_header %}
    {% for field in header %}
        <th>
            {% if 'checkBox' not in field.vars.block_prefixes %}
                {{ form_label(field)|raw }}
            {% else %}
                {% if field.vars.attr['data-label'] is defined %}
                    {{ field.vars.attr['data-label'] }}
                {% else %}
                    Options
                {% endif %}
            {% endif %}
        </th>
    {% endfor %}
    {% if allow_delete %}
        <th class="align_center">Supprimer</th>
    {% endif %}
{% endblock %}

{% block collection_body %}
    {% spaceless %}
    {% set fieldNum = 1 %}
    <tr class="row_to_delete child_collection">
        {{ form_errors(body) }}
        {% for field in body %}
            <td class="field{{ fieldNum }} data-label">
                {{ form_widget(field) }}
                {{ form_errors(field) }}
            </td>
            {% set fieldNum = fieldNum + 1 %}
        {% endfor %}
        {% if allow_delete %}
            <td class="align_center align_middle"><a href="#/" class="fmu_delete_button btn btn-default btn-xs"><i class="fa fa-times"></i></a></td>
        {% endif %}
    </tr>
    {% endspaceless %}
{% endblock %}

我想使用的代码不起作用:

视图保持不变

{# From file myview.html.twig #}
{% form_theme form ':Model:prototype_table_collection.html.twig' %}
{% form(form) %}

在这里,我试图从第一个块内部化代码

{# From file ':Model:prototype_table_collection.html.twig' #}
{% block collection_widget %}
    {{include(':Model:collection_widget.html.twig')}}
{%end block%}

{% block collection_header %}
{#stays the same as the prevIoUs code for this block. It is called by the block collection_widget #}
{%end block%}

{% block collection_body %}
{#stays the same as the prevIoUs code for this block. It is called by the block collection_widget #}
{%end block%}

新的外化文件

{#From file ':Model:collection_widget.html.twig' #}
{# Here I put the same exact code as I had before inside the block collection_widget, I'm not changing the code, I'm just trying to externalize this part #}

包含不起作用,我的收藏不加载.

我试过扩展布局,它也不起作用.
示例:

{# From file ':Model:prototype_table_collection.html.twig' #}
{% extends :Model:parent.html.twig' %}

{% block content %}

{% block collection_header %}
{#stays the same as the prevIoUs code for this block. It is called by the block collection_widget #}
{%end block%}

{% block collection_body %}
{#stays the same as the prevIoUs code for this block. It is called by the block collection_widget #}
{%end block%}

{%end block%}

和父母:

{# From file ':Model:parent.html.twig' #}

{% block collection_widget %}
    {# same code as brefore #}
{%end block%}

{% block content %}
{% endblock %}

如何避免在我使用它的每个表单模板中重复此{%block collection_widget%}代码

解决方法:

我相信您正在寻找horizontal reuse功能

Horizontal reuse is an advanced Twig feature that is hardly ever needed in regular templates. It is mainly used by projects that need to make template blocks reusable without using inheritance.

只需在主模板中包含use标记

{# :Model:prototype_table_collection.html.twig #}

{% use ':Model:collection_widget.html.twig' %}

{% block collection_header %}
    {# code #}
{%end block%}

{% block collection_body %}
    {# code #}
{%end block%}

然后定义collection_widget块,就好像它首先位于prototype_table_collection.html.twig文件中一样:

{# :Model:collection_widget.html.twig #}
{% block collection_widget %}
    {# code #}
{% endblock %}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐