如何遍历 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 %}
这只是一个粗略的示例,但您大概可以看出其背后的想法。考虑可能的递归深度是明智的。越往下,溢出栈的几率越大。
希望这对您有所帮助...
这是上一个 post
树枝:
{% 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 %}
这只是一个粗略的示例,但您大概可以看出其背后的想法。考虑可能的递归深度是明智的。越往下,溢出栈的几率越大。
希望这对您有所帮助...