【问题标题】:How to disable HTML escaping of labels in KnpMenuBundle如何在 KnpMenuBundle 中禁用标签的 HTML 转义
【发布时间】:2013-04-22 16:46:46
【问题描述】:

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

但我的标签仍在被转义。我究竟做错了什么?

【问题讨论】:

  • 我尝试了你的问题,这就是我的答案,并且可以完美地与我一起使用 route :) 谢谢

标签: symfony knpmenubundle knpmenu


【解决方案1】:

好的,答案是!

您不是通过“extra”键而是通过“extras”键在菜单项上设置了额外的项目。 因此,当您像这样设置项目时:

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

效果很好!

【讨论】:

  • 啊,我们通常使用setExtra方法而不是数组初始化。很好地抓住了额外的缺失的“s”!
  • 我刚刚在一个项目上做了这个,值得注意的是,为了让它工作,需要在工厂和视图中设置两个 safe_label 选项。 ('extras' => 数组('safe_label' => true) & {'allow_safe_labels': true}
【解决方案2】:

有两个步骤可以实现。

1。菜单生成器

您必须在extras 中将safe_label 设置为true。请注意,您现在可以在标签中写入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 漏洞。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      尝试使用原始过滤器

      {{ knp_menu_render('WshCmsHtmlBundle:Builder:mainMenu', {'allow_safe_labels': true} )|raw }}
      

      【讨论】:

        猜你喜欢
        • 2017-12-18
        • 1970-01-01
        • 1970-01-01
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多