跳到内容

注册您自己的渲染器

编辑此页

在渲染器提供器中注册您自己的渲染器非常简单,只需创建一个带有 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 许可下获得许可。
目录
    版本