Вот макрос немного измененный подобного вопроса с stackoverflow
{% macro menu(links) %}
    {% for key, link in links %}
        <li>
            <a href="{{ link }}">{{ key }}</a>
            {% if link.sublink %}
                <ul>
                    {{ _self.menu_links(link[key]) }}
                </ul>
            {% endif %}
        </li>
    {% endfor %}
{% endmacro %}
Но у link нет sublink и нет фильтра hassublinks. Как быть, самому написать? Или все же есть методы проверки внутри ядра твига?
if link is array — также не работает, такой проверки нет
На вход подается массив, если нужно могу дать var_dump, в yml он выглядит так:
Главная: /
Контакты: /contacts
Форум: /forum
О нас: /about
Услуги:
    Услуга1: /one
    Услуга2: /two