这是从之前的帖子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 %}
答案 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 %}
这只是一个粗略的例子,但你可能会看到它背后的想法。考虑可能的递归深度是明智的。你走的越深,堆栈溢出的可能性就越大。
希望这会有所帮助......