Symfony2 Twig неограниченная глубина детства

У меня есть таблица для самостоятельного соединения, в которой каждая папка имеет родителя, а глубина – неограниченная. Одна папка может иметь другую папку в качестве родителя, без ограничений на глубину.

Сегодня мой код выглядит так, и я ищу способ выкапывания настолько глубоко, насколько это необходимо, без жесткого кодирования с каждым шагом вниз, может быть, есть способ определить функцию twig с циклом, который вызывает себя в каждом раунде в петле?

<select id='parent' name='container'> <option value='none'>No parent</option> {% for folder in folders %} <option value='{{ folder.id }}'>{{ folder.name }}</option> {% for folder in folder.children %} <option value='{{ folder.id }}'>&nbsp;&nbsp;&nbsp;{{ folder.name }}</option> {% endfor %} {% endfor %} </select> 

Вам нужны отдельные опции рендеринга файлов, которые рекурсивно включают в себя:

 <select> <option value="none">No parent</option> {% include 'options.html.twig' with {'folders': folders, 'level': 0} %} </select> 

options.html.twig :

 {% for folder in folders %} <option value="{{ folder.id }}"> {% for i in range(0, level) %}&nbsp;{% endfor %} {{ folder.name }} </option> {% include 'options.html.twig' with {'folders': folder.children, 'level': level + 1} %} {% endfor %} 

Я написал этот код прямо здесь, поэтому не ожидайте, что это будет правильно, но этого должно быть достаточно, чтобы дать вам эту идею.

Это нужно сделать с помощью рекурсии . Я никогда не тестировал его с веточкой, но вы могли бы разработать механизм, в котором вы рекурсивно включаете шаблон.

Таким образом, ваш текущий шаблон будет включать себя в цикл до тех пор, пока не будет достигнуто определенное условие. Поэтому в вашем внутреннем цикле вам нужно какое-то предложение if.

Удачи 😉