Добавить класс в корневой элемент меню knp с помощью Twig

knp_menu's правильный способ добавить класс в корневой элемент knp_menu's <ul> с веточкой?

я много пробовал:

1.

 {{ knp_menu_render('main', {'class': 'foo'}) }} 

2.

 {{ knp_menu_render('main', {'attributes': {'class': 'foo'}}) }} 

3.

 {{ knp_menu_render('main', {'listAttributes': {'class': 'foo'}}) }} 

4.

 {{ knp_menu_render('main', {'attributes': {'listAttributes': {'class': 'foo'}}}) }} 

никто из них не работал

Вы можете добавить его в свой строитель меню, как ..

 $menu = $this->factory->createItem('root', array( 'childrenAttributes' => array( 'class' => 'foo', ), )); 

Обновить

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

В вашем пользовательском шаблоне вам необходимо переопределить блок list например ..

 {% block list %} {% if item.hasChildren and options.depth is not sameas(0) and item.displayChildren %} {% import 'knp_menu.html.twig' as knp_menu %} <ul{{ knp_menu.attributes(listAttributes|merge({'class': [ options.rootClass is defined ? options.rootClass : '', listAttributes.class is defined ? listAttributes.class : '' ]|join(' ') })) }}> {% set options = options|merge({'rootClass': '' }) %} {{ block('children') }} </ul> {% endif %} {% endblock %} 

Вместо этого используйте knp_menu.attributes(listAttributes) вы передаете в массив с вашим listAttributes.class значением listAttributes.class на лету. Этот атрибут генерируется путем присоединения параметра option.rootClass (если он существует) с listAttributes.class (если он существует) в качестве значения listAttributes.class .

Значение option.rootClass сбрасывается до '' после использования, используя {% set options = options|merge({'rootClass': '' }) %} чтобы он не добавлялся в каждое подменю.

Это позволит вам отображать ваше меню, используя ..

 {{ knp_menu_render('main', {'rootClass': 'foo' }) }} 

Не нашли и чистого решения для прохождения параметров. Мое решение в классе builder :

$menu->setChildrenAttribute('id', 'boo') ->setChildrenAttribute('class', 'foo');

Попробуй

 {% set menu = knp_menu_get('AppBundle:Builder:categoriesMenu', [], {'childrenAttributes': {'class': 'menu'}}) %} {{ knp_menu_render(menu) }} 
 {% set menu = knp_menu_get('AppBundle:Builder:mainMenu', []) %} {% do menu.setChildrenAttribute('class', 'child-class') %} {% knp_menu_render(menu, {'currentClass': 'active'}) %} 

найдено здесь https://github.com/KnpLabs/KnpMenu/issues/166