Как отключить HTML-экранирование меток в KnpMenuBundle
Я хочу сделать метку HTML
следующим:
$menu->addChild('Dashboard', array(
'route' => 'dashboard',
'label' => '<i class="fa-icon-bar-chart"></i><span class="hidden-tablet"> Dashboard</span></a>',
'extra' => array('safe_label' => true)
)
);
И я передаю правильный вариант при рендеринге:
{{ knp_menu_render('WshCmsHtmlBundle:Builder:mainMenu', {'allow_safe_labels': true} ) }}
Но мой ярлык все еще сбежал. Что я делаю не так?
Ответы
Ответ 1
Хорошо, ответ:
Вы настраиваете дополнительные элементы в элементе меню не клавишей "extra", а клавишей "дополнительные".
Поэтому, когда вы настраиваете элемент следующим образом:
$menu->addChild('Dashboard', array(
'route' => 'dashboard',
'label' => '<i class="fa-icon-bar-chart"></i><span class="hidden-tablet"> Dashboard</span></a>',
'extras' => array('safe_label' => true)
)
);
он отлично работает!
Ответ 2
Для этого есть два шага.
1. MenuBuilder
Вы должны установить safe_label
в true
в extras
. Обратите внимание, что теперь вы можете написать HTML
в своей метке.
$menu->addChild('Home<i><b></b></i>', array(
'route' => 'homepage',
'extras' => array(
'safe_label' => true
),
));
2. Twig
Вы должны отфильтровать вывод knp_menu_render()
, чтобы он печатал raw HTML
(см. документация).
{{ knp_menu_render('main', {'allow_safe_labels': true}) | raw }}
Предупреждение
Помните, что это может быть опасно. В документации :
Используйте его с осторожностью, поскольку он может создавать некоторые отверстия XSS в приложении, если метка исходит от пользователя.
Ответ 3
Я использовал метод FyodorX для добавления сильного тега. Он работает как шарм, но я должен сказать, что необработанный фильтр не нужен
Ответ 4
Попробуйте использовать необработанный фильтр
{{ knp_menu_render('WshCmsHtmlBundle:Builder:mainMenu', {'allow_safe_labels': true} )|raw }}