使用Twig将类添加到knp菜单根元素

her*_*w78 11 php symfony twig knpmenubundle

使用twig 将类添加到knp_menu'sroot元素的正确方法是什么<ul>

我尝试了很多东西:

1.

{{ knp_menu_render('main', {'class': 'foo'}) }}
Run Code Online (Sandbox Code Playgroud)

2.

{{ knp_menu_render('main', {'attributes': {'class': 'foo'}}) }}
Run Code Online (Sandbox Code Playgroud)

3.

{{ knp_menu_render('main', {'listAttributes': {'class': 'foo'}}) }}
Run Code Online (Sandbox Code Playgroud)

4.

{{ knp_menu_render('main', {'attributes': {'listAttributes': {'class': 'foo'}}}) }}
Run Code Online (Sandbox Code Playgroud)

他们都没有工作

qoo*_*mao 15

您可以在菜单生成器中添加它,例如..

$menu = $this->factory->createItem('root', array(
    'childrenAttributes'    => array(
        'class'             => 'foo',
    ),
));
Run Code Online (Sandbox Code Playgroud)

更新

我刚收到一个关于此的通知,并找到了另一种方法,虽然它要求您使用自定义模板来实现它.

在您的自定义模板中,您需要覆盖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 %}
Run Code Online (Sandbox Code Playgroud)

在这里,而不是使用knp_menu.attributes(listAttributes)你传递一个数组与你的动态生成listAttributes.class值.通过连接option.rootClass(如果listAttributes.class存在)作为listAttributes.class值(如果存在)来生成此属性.

option.rootClass值复位为''使用后使用{% set options = options|merge({'rootClass': '' }) %},这样就不会被添加到每个子菜单.

这将允许您使用..渲染菜单..

{{ knp_menu_render('main', {'rootClass': 'foo' }) }}
Run Code Online (Sandbox Code Playgroud)