12

我想渲染一个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

4 回答 4

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)
)
);

它工作正常!

于 2013-04-23T12:13:27.840 回答
11

有两个步骤可以实现这一点。

1. 菜单生成器

您必须设置safe_labeltruein 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 漏洞。

于 2014-09-30T23:55:11.383 回答
1

我使用 FyodorX 的方法添加了一个强标签。它就像一个魅力,但我必须说原始过滤器不是必需的

于 2015-04-03T14:45:40.010 回答
0

尝试使用原始过滤器

{{ knp_menu_render('WshCmsHtmlBundle:Builder:mainMenu', {'allow_safe_labels': true} )|raw }}
于 2013-04-22T18:08:31.813 回答