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
显示菜单项没有树视图
您可以修改菜单以显示没有树视图的菜单项。你需要增加一个选项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
选项标签
而且博客
管理服务。
您不能同时对两个或多个项目使用此选项:
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
具有多个同名组的选项”。