我想呈现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} ) }}
但我的标签仍在逃脱。我究竟做错了什么?
答案 0 :(得分:17)
好的,答案是!
您在菜单项上设置了额外的项目而不是&#39;额外的&#39;关键但是由额外的&#39;键。 所以当你设置这样的项目时:
$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)
)
);
它工作正常!
答案 1 :(得分:11)
实现这一目标有两个步骤。
您必须在safe_label
中将true
设置为extras
。请注意,您现在可以在标签中写下HTML
。
$menu->addChild('Home<i><b></b></i>', array(
'route' => 'homepage',
'extras' => array(
'safe_label' => true
),
));
您必须过滤knp_menu_render()
的输出,以便打印原始HTML
(请参阅documentation)。
{{ knp_menu_render('main', {'allow_safe_labels': true}) | raw }}
请注意,这可能很危险。来自documentation:
请谨慎使用,因为如果标签来自用户,它可能会在您的应用程序中创建一些XSS漏洞。
答案 2 :(得分:1)
我使用FyodorX的方法添加强标签。它就像一个魅力,但我必须说原始过滤器是不必要的
答案 3 :(得分:0)
尝试使用原始过滤器
{{ knp_menu_render('WshCmsHtmlBundle:Builder:mainMenu', {'allow_safe_labels': true} )|raw }}