Раздел вопрос-ответ KnpMenuBundle не работает safe_label - эскейпит html в любом случае

Хочу добавить внутрь пункта меню кусочек html, один дополнительный span. 

Span добавлятся, но экранируется и не рендерится.

Т.е. должно быть так:

Выпадающее меню Symfony knpmenubundle с html разметкой

Но у меня выводится "голый" html (не рендерится) при использовании KnpMenuBundle c safe_label = true и alow_safe_labels = true:

knpmenubundle не работает выключение экранирования safe_label

Код рендеринга меню в .twig:

{{ knp_menu_render('AppBundle:Builder:navBarMenu', {'allow_‌​safe_labels': true}) }}

Код меню билдера:

$menu->addChild($dropdown->getName(), [
    'uri' => '#',
    'class' => 'dropdown active',
    'childrenAttributes' => [
        'class'             => 'dropdown active',
        'data-toggle'       => 'dropdown',
        'role'              => 'button',
        'aria-haspopup'     => true,
        'aria-expanded'     => false,
    ],
    'label' => $dropdown->getName() . '<span class="caret"></span>',
    'extras' => ['safe_label' => true]
])

Даже с минимальным кодом не работает.

$menu->addChild('title', [
    'uri' => '#',
    'label' => 'title<span class="caret"></span>',
    'extras' => ['safe_label' => true]
]);

Версия KnpMenuBundle бандла 2.1.3, symfony 3.2.4.

share

1 ответ

В своей проблеме я разобрался. 

В опции присутствовали скрытые символы.

см. скриншот:

knpmenubundle всегда экранировал html, т.к. в имени опции была ошибка - скрытые символы.

В выводе git diff скрытые символы видны, хотя визуально в IDE не были видны. Лишние символы были в опции "allow_safe_labels".

knpmenubundle cкрытые символы. Почему не работает allow_safe_labels?

Как результат, значение опции allow_safe_labels не применялось. Исправил название опции и всё стало в порядке - html перестал экранироваться

Добавить комментарий
    как минимум 5 символов

    icon Вход в систему

    зарегистрироваться
    НОВЫЕ ПОЛЬЗОВАТЕЛИ