如何在KnpMenuBundle中禁用HTML转义标签

时间:2013-04-22 16:46:47

标签: symfony knpmenubundle knpmenu

我想呈现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} ) }}

但我的标签仍在逃脱。我究竟做错了什么?

4 个答案:

答案 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)

实现这一目标有两个步骤。

1。使用MenuBuilder

您必须在safe_label中将true设置为extras。请注意,您现在可以在标签中写下HTML

$menu->addChild('Home<i><b></b></i>', array(
    'route' => 'homepage',
    'extras' => array(
        'safe_label' => true
    ),
));

2。树枝

您必须过滤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 }}