注册您自己的渲染器
在渲染器提供器中注册您自己的渲染器非常简单,只需创建一个带有 knp_menu.renderer
标签的服务即可
1 2 3 4 5 6 7 8 9 10 11
# config/services.yaml
services:
app.menu_renderer:
# The class implements Knp\Menu\Renderer\RendererInterface
class: App\Menu\CustomRenderer
arguments: ["%kernel.charset%"] # set your own dependencies here
tags:
# The alias is what is used to retrieve the menu
- { name: knp_menu.renderer, alias: custom }
# ...
如果您的渲染器扩展了 ListRenderer
,您需要提供一个 Matcher
实例。配置如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# config/services.yaml
services:
app.menu_renderer:
# The class implements Knp\Menu\Renderer\RendererInterface
class: App\Menu\CustomRenderer
arguments:
- '@knp_menu.matcher'
- '%knp_menu.renderer.list.options%'
- '%kernel.charset%'
# add your own dependencies here
tags:
# The alias is what is used to retrieve the menu
- { name: knp_menu.renderer, alias: custom }
# ...
注意
渲染器服务必须是公开的,因为它将在运行时被检索以保持其延迟加载。
现在您可以使用您的渲染器来渲染您的菜单
1
{{ knp_menu_render('main', {}, 'custom') }}
注意
由于渲染器负责渲染一些 HTML 代码,knp_menu_render
函数被标记为安全。如果您在菜单中使用了一些用户输入,请注意在您的渲染器中处理转义数据以避免 XSS。
本作品,包括代码示例,均在 Creative Commons BY-SA 3.0 许可下获得许可。