KnpMenu

编辑本页

KnpMenu

管理员是自带的KnpMenu集成。它集成了一个菜单和KnpMenu库。该菜单可以是SonataAdmin服务、用Knp菜单提供程序创建的菜单或自定义控制器的路由。

在菜单中添加一个自定义控制器条目

在管理菜单中添加一个自定义控制器条目:

创建你的控制器:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
使用ob娱乐下载组件HttpFoundation响应最后BlogController/ * * *@Route("/blog", name="blog_home") */公共函数blogAction()响应/ /……/ * * *@Route(“/博客/文章/{正如}”,name = " blog_article ") * /公共函数ArticleAction(字符串正如响应/ /……}}

将控制器路由添加为菜单项:

  • YAML
12 3 4 5 6 7 8 9 10 11 12 13 14 15
#配置/包/ sonata_admin.yamlsonata_admin:指示板:组:欧宝平台是合法的吗新闻:标签:translation_domain:项目:-sonata.欧宝平台是合法的吗news.admin.post-路线:blog_home标签:博客-路线:blog_articleroute_params:正如:3.标签:文章

如果要将路由显示给不同角色的用户,可以为每条路由配置此选项。如果没有设置,将检查组角色。

  • YAML
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#配置/包/ sonata_admin.yamlsonata_admin:指示板:组:欧宝平台是合法的吗新闻:标签:translation_domain:项目:-sonata.欧宝平台是合法的吗news.admin.post-路线:blog_home标签:博客角色:[' ROLE_FOO ',“ROLE_BAR”-路线:blog_articleroute_params:正如:3.标签:文章角色:[' ROLE_ADMIN ',“ROLE_SONATA_ADMIN”

您还可以覆盖sonata使用的knp_menu模板。默认的是“@SonataAdmin/Menu/sonata_menu.html.twig”:

  • YAML
1 2 3 4 5
#配置/包/ sonata_admin.yamlsonata_admin:模板:knp_menu_template:“@ApplicationAdmin /菜单/ custom_knp_menu.html.twig '

现在你有一个菜单组,其中包含一个链接到一个索纳塔管理员通过其id,到你的博客和一篇特定的文章。

使用菜单提供程序

如上所述,声明菜单的主要方法是在sonata管理配置文件中声明项。在某些情况下,您可能必须根据业务逻辑创建更复杂的菜单。这可以通过使用菜单提供程序来填充整个菜单组来实现。这是用提供者配置值。

下面的配置使用菜单提供程序填充菜单组my_group

  • YAML
1 2 3 4 5 6 7 8
#配置/包/ sonata_admin.yamlsonata_admin:指示板:组:my_group:供应商:“MyBundle: MyMenuProvider: getMyMenu”图标:“fas fa-edit”# HTML也被支持

使用KnpMenuBundle,您可以通过使用构建器类或将其声明为服务来创建自定义菜单。请参阅Knp文欧宝官网下载app档获取更多信息。

在sonata中,无论你选择哪种实现,你只需要向提供者配置键提供菜单别名:

  • 如果您正在使用一个构建器类,那么您的菜单别名应该类似于MyBundle: MyMenuProvider: getMyMenu
  • 方法中设置的别名是菜单别名knp_menu.menu标签。在下面的例子中,这是my_menu_alias
  • XML
1 2 3
<服务id“my_menu_provider”“MyBundle / MyDirectory / MyMenuProvider”><标签的名字“knp_menu.menu”别名“my_menu_alias”/>服务>

请注意,当使用提供者选项时,您不能通过配置设置菜单标签。这是在您的自定义菜单中完成的。

扩展菜单

您可以通过事件修改菜单。您可以为具有名称的事件注册任意数量的侦听器sonata.admin.event.configure.menu.sidebar

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
/ / src / EventListener / MenuBuilderListener.php名称空间应用程序EventListener使用奏鸣曲AdminBundle事件ConfigureMenuEvent最后MenuBuilderListener公共函数addMenuItems(ConfigureMenuEvent事件无效菜单事件->getMenu ();孩子菜单->addChild (“报告”, (“标签”= >“每日及每月报告”“路线”= >“app_reports_index”,)->setExtras ([“图标”= >“fas fa-bar-chart”// HTML也支持]);}}
  • YAML
1 2 3 4 5 6 7
#配置/ services.yaml服务:app.menu_listener:类:App \ EventListener \ MenuBuilderListener标签:-名称:kernel.event_listener,事件:sonata.admin.event.configure.menu.sidebar,方法:addMenuItems

请参阅使用事件允许扩展菜单获取更多信息。

隐藏菜单项

您可以修改菜单以隐藏某些菜单项。您需要添加show_in_dashboard选项中的菜单项或从sonata_admin仪表盘组配置:

1 2 3 4 5 6
#配置/ services.yamlsonata_admin.admin.post:类:奏鸣曲\ AdminBundle \ Admin \ PostAdmin标签:-名称:sonata.admin,model_class:奏鸣曲\ AdminBundle \实体\,控制器:奏鸣曲\ \ CRUDController AdminBundle \控制器,manager_type:orm,组:管理,标签:篇文章,show_in_dashboard:
12 3 4 5 6 7 8 9 10 11 12 13 14
#配置/包/ sonata_admin.yamlsonata_admin:指示板:组:欧宝平台是合法的吗新闻:标签:translation_domain:项目:#注释或删除sonata.news.admin.post声明以欧宝平台是合法的吗将其隐藏在菜单中。# - sonata.欧宝平台是合法的吗news.admin.post-路线:blog_home标签:博客-sonata.欧宝平台是合法的吗news.admin.news

保持菜单组打开

您可以添加keep_open选项菜单组保持该组始终打开并忽略打开/关闭效果:

12 3 4 5 6 7 8 9 10 11 12 13
#配置/包/ sonata_admin.yamlsonata_admin:指示板:组:sonata.admin.group.content:keep_open:真正的标签:sonata_mediatranslation_domain:SonataMediaBundle图标:“fas fa-image”# HTML也被支持项目:-sonata.media.admin.media-sonata.media.admin.gallery
使用“keep_open”选项的组的导航侧栏

显示菜单项没有树视图

您可以修改菜单以显示没有树视图的菜单项。你需要增加一个选项on_top在您的管理服务或sonata_admin仪表板组配置中:

1 2 3 4 5 6
#配置/ services.yamlsonata_admin.admin.post:类:奏鸣曲\ AdminBundle \ Admin \ PostAdmin标签:-名称:sonata.admin,model_class:奏鸣曲\ AdminBundle \实体\,控制器:奏鸣曲\ \ CRUDController AdminBundle \控制器,manager_type:orm,组:管理,标签:篇文章,on_top:真正的
1 2 3 4 5 6 7 8 9 10 11
#配置/包/ sonata_admin.yamlsonata_admin:指示板:组:欧宝平台是合法的吗新闻:on_top:真正的标签:translation_domain:项目:-sonata.欧宝平台是合法的吗news.admin.post
on_top选项

在这个截图中,我们添加on_top选项标签而且博客管理服务。

您不能同时对两个或多个项目使用此选项:

12 3 4 5 6 7 8 9 10 11 12 13
#配置/包/ sonata_admin.yamlsonata_admin:指示板:组:欧宝平台是合法的吗新闻:on_top:真正的标签:translation_domain:项目:-sonata.欧宝平台是合法的吗news.admin.post-路线:blog_home标签:博客

在这种情况下,您有一个例外:“您不能使用on_top具有多个同名组的选项”。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。