如何在Twig中遍历数组数组

时间:2015-08-17 16:07:13

标签: php arrays symfony twig

这是从之前的帖子here继续。我下面的twig文件可以分为两个级别并使用for循环,但我的孩子中有更多的孩子。该对象包含一个数组数组,并且按层次顺序排列。如果可能的话,我正在寻找递归解决方案。我使用bootstrap可能也有帮助,但没有必要。

嫩枝:

{% extends 'CompanyMyBundle::base.html.twig' %}

{% block body -%}
    <h1>Org list</h1>

    <table class="records_list">
        <thead>
            <tr>
                <th>name</th>
                <th>parentid</th>
                <th>id</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
        {% for entity in entities %}
            <tr>
                <td><a href="{{ path('org_show', { 'id': entity.Id }) }}">{{ entity.Name }}</a></td>
               <td>{{ entity.ParentId }}</td>
                <td>{{ entity.Id }}</td>
                <td>
                    <ul>
                        <li>
                            <a href="{{ path('org_show', { 'id': entity.Id }) }}">show</a>
                        </li>
                        <li>
                            <a href="{{ path('org_edit', { 'id': entity.Id }) }}">edit</a>
                        </li>
                    </ul>
                </td>
            </tr>
            {% for child in entity.children %}
            <tr>
                <td><a href="{{ path('org_show', { 'id': child.Id }) }}">{{ child.Name }}</a></td>
                <td>{{ child.ParentId }}</td>
                <td>{{ child.Id }}</td>
                <td>
                <ul>
                    <li>
                        <a href="{{ path('org_show', { 'id': child.Id }) }}">show</a>
                    </li>
                    <li>
                        <a href="{{ path('org_edit', { 'id': child.Id }) }}">edit</a>
                    </li>
                </ul>
                </td>
            </tr>
            {% endfor %}
        {% endfor %}
        </tbody>
    </table>

        <ul>
        <li>
            <a href="{{ path('org_new') }}">
                Create a new entry
            </a>
        </li>
    </ul>
    {% endblock %}

1 个答案:

答案 0 :(得分:1)

相当容易。您可以{{ include }}每个节点的模板文件。像这样:

<强> Node.html.twig

<tr>
    <td><a href="{{ path('org_show', { 'id': entity.Id }) }}">{{ entity.Name }}</a></td>
   <td>{{ entity.ParentId }}</td>
    <td>{{ entity.Id }}</td>
    <td>
        <ul>
            <li>
                <a href="{{ path('org_show', { 'id': entity.Id }) }}">show</a>
            </li>
            <li>
                <a href="{{ path('org_edit', { 'id': entity.Id }) }}">edit</a>
            </li>
        </ul>
    </td>
</tr>

{# Recursively print all children nodes #}
{% for child in entity.children %}
    {{ include("Node.html.twig", {'entity': child}) }}
{% endfor %}

然后在你的主模板中:

{% for entity in entities %}
    {{ include("Node.html.twig", {'entity': entity}) }}
{% endfor %}

这只是一个粗略的例子,但你可能会看到它背后的想法。考虑可能的递归深度是明智的。你走的越深,堆栈溢出的可能性就越大。

希望这会有所帮助......