KnpMenuBundle - отправьте параметры и используйте их в Twig

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

$menu->addChild('Registration', array('route' => 'fos_user_registration_register',
                                      'icon'  => array('glyphicon' => 'briefcase')));

И тогда я хочу выбрать это в шаблоне Twig:

{% if icon['glyphicon'] is defined %}
    <span class="glyphicon glyphicon-{{icon['glyphicon']}} "></span>
{% endif %}

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

2 ответа

Вот как я это сделал

Класс Меню:

$menu->addChild('Home', array(
    'route' => 'home',
    'extras' => array('icon' => 'home')
));

Мой вызов меню в шаблоне, я прошу конкретный шаблон ветки

{{ knp_menu_render('MyBundle:Menu:primaryNav', {'template': 'MyBundle:Menu:primaryNav.html.twig'}) }}

В шаблоне ветки я копирую / вставляю шаблон knpmenubundle и редактирую некоторые блоки. Вы также можете сделать это с помощью "extends" и шаблонов наследования (возможно, лучшая идея).

Пример отредактированного блока для иконки:

{% block spanElement %}
<a href="#" class="dropdown-toggle">
    {% if item.extras.icon is defined %}<i class="icon-{{ item.extras.icon }}"></i>{% endif %}
    <span class="menu-text"> {{ block('label') }}</span>
    <b class="arrow icon-angle-down"></b>
</a>
{% endblock %}

Возможно, вам нужно было это поле "дополнительные" в классе меню:)

Я не знаю, может ли это все-таки помочь, но есть намного более простой способ использовать шрифт с меню knp. Есть вариант, где вы можете дать класс по вашей ссылке. Вам просто нужно создать дочерний элемент без метки add setLinkAttribute. Пример:

$ menu-> addChild ('', array ('route' => 'backend_index')) -> setLinkAttribute ('class', 'fa fa-home');

Это создаст тег "a" с классом fa fa-home. Даже если документация о шрифте ошеломляет, что значки предназначены для встроенных элементов, она будет работать с тегом "a". Затем вы можете использовать некоторые CSS для улучшения дизайна. В моем случае я просто изменил размер шрифта и высоту строки.

Другие вопросы по тегам