我想呈现的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} ) }}
但我的标签仍然在逃脱。 我究竟做错了什么?
好吧,答案是!
您设置在菜单项多余的物品不被“额外”的关键,但通过“额外”的关键。 所以,当你设置这样的项目:
$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.使用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
(见文档 )。
{{ knp_menu_render('main', {'allow_safe_labels': true}) | raw }}
警告
请注意,这可能是危险的。 从文档 :
所以请谨慎使用,因为它可以在你的应用程序中创建一些XSS漏洞,如果标签从用户的到来。
我用FyodorX的方法添加一个强有力的标签。 它的工作原理就像一个魅力,但我必须说,原过滤器是没有必要的
尝试使用原始过滤器
{{ knp_menu_render('WshCmsHtmlBundle:Builder:mainMenu', {'allow_safe_labels': true} )|raw }}