如何遍历 Twig 中的数组数组

How to iterate through an array of arrays in Twig

这是上一个 post 的延续。我下面的树枝文件可以分为两层并使用 for 循环,但我在 children 中有更多 children。 object 包含一个数组数组,并按层次顺序排列。如果可能的话,我正在寻找递归解决方案。我使用 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 %}

相当容易。您可以 {{ 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 %}

这只是一个粗略的示例,但您大概可以看出其背后的想法。考虑可能的递归深度是明智的。越往下,溢出栈的几率越大。

希望这对您有所帮助...