Symfony 具有父、子、孙辈的层次化细枝布局的递归解析

Symfony 具有父、子、孙辈的层次化细枝布局的递归解析,symfony,macros,twig,hierarchy,Symfony,Macros,Twig,Hierarchy,在我的SF2项目中,我有一个实体(类别),我以分层格式表示,在顶部有一个父项,后面是子项、孙子项等 类别实体有一个getChildren方法,该方法工作并返回Category实体对象 我正试图找到一种方法使这个布局更具动态性,而不是必须在模板中显式地设置子项和子项变量 有更好的方法吗 <ul class="sortable"> {% for cat in cats %} {% set children = cat.getChildren %}

在我的SF2项目中,我有一个实体(类别),我以分层格式表示,在顶部有一个父项,后面是子项、孙子项等

类别实体有一个
getChildren
方法,该方法工作并返回
Category
实体对象

我正试图找到一种方法使这个布局更具动态性,而不是必须在模板中显式地设置
子项
子项
变量

有更好的方法吗

<ul class="sortable">
    {% for cat in cats %}
        {% set children = cat.getChildren %}
        <li id="menuItem_{{ cat.id }}">
            <div data-id="{{ cat.id }}">
                <span>{{ cat.name }}</span>
            </div>
            {% for child in children %}
                {% set grandchildren = child.getChildren %}
                <ul>
                    <li id="menuItem_{{ child.id }}">
                        <div data-id="{{ child.id }}">
                            {{ child.name }}
                        </div>
                        {% for grandchild in grandchildren %}
                            <ul>
                                <li id="menuItem_{{ grandchild.id }}">
                                    <div data-id="{{ grandchild.id }}">
                                        {{ grandchild.name }}
                                    </div>
                                </li>
                            </ul>
                        {% endfor %}
                    </li>
                </ul>
            {% endfor %}
        </li>
    {% endfor %}
</ul>
    {猫中猫的百分比%} {%set children=cat.getChildren%}
  • {{cat.name} {children%%中的children的百分比} {%set-sunderenes=child.getChildren%}
    • {{child.name} {孙辈中的孙辈%}
      • {{grander.name}
      {%endfor%}
    {%endfor%}
  • {%endfor%}

那么您试图实现的是对细枝中的树的递归解析,对吗?
如果是,请看一看 .


然后您可以使用相同的符号来命名它

谢谢,我在使用它时在应用程序中看到了一个异常。这是我的代码的一个粘贴箱——很明显我做的不对吗?我真的不知道导入宏是如何工作的,但我最好的猜测是“导入…作为tree\u children”覆盖了tree\u children变量。尝试不使用别名导入。如果不起作用,请尝试在同一文件中使用宏。太好了,谢谢。我不得不在宏中添加
{%import\u self as macros%}
。我已经更新并接受了你的答案。谢谢你的帮助。
{% import _self as macros %}

{% macro showChild(object) %}
  {% import _self as macros %}
  <ul>
    {% for child in object.children %}
      {{ macros.showChild(child) }}
    {% endfor %}
    <li id="menuItem_{{ object.id }}">
      <div data-id="{{ object.id }}">
        {{ object.name }}
      </div>
    </li>
  </ul>
{% endmacro %}

<ul class="sortable">
  {% for cat in cats %}
    {{ macros.showChild(cat) }}
  {% endfor %}
</ul>
index.html.twig:
{% import 'macro_file_name.html.twig' as macros %}