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

Bar*_*cki 12 symfony knpmenu 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)
    )
);
Run Code Online (Sandbox Code Playgroud)

我在渲染时传递了正确的选项:

{{ knp_menu_render('WshCmsHtmlBundle:Builder:mainMenu', {'allow_safe_labels': true} ) }}
Run Code Online (Sandbox Code Playgroud)

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

Bar*_*cki 17

好的,答案是!

您在菜单项上设置了额外的项目,而不是"额外"键,而是"额外"键.所以当你设置这样的项目时:

$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)
)
);
Run Code Online (Sandbox Code Playgroud)

它工作正常!

  • 我刚刚在一个项目上做了这个,值得注意的是,为了使它能够工作,需要在工厂和视图中设置safe_label选项.('extras'=> array('safe_label'=> true)&{'allow_safe_labels':true} (6认同)

Fyo*_*orX 11

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

1. MenuBuilder

你必须设置safe_labeltrueextras.请注意,您现在可以HTML在标签上写下来.

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

2.树枝

您必须过滤输出,knp_menu_render()以便打印raw HTML(请参阅文档).

{{ knp_menu_render('main', {'allow_safe_labels': true}) | raw }}
Run Code Online (Sandbox Code Playgroud)

警告

请注意,这可能很危险.从文档:

请谨慎使用,因为如果标签来自用户,它可能会在您的应用程序中创建一些XSS漏洞.