Symfony中Sonata Admin左侧菜单自定义:取消分组改为单个项
解决Sonata Admin左侧菜单从分组改为独立项的方法
嗨,别担心英文不好~我来帮你搞定这个问题!在Sonata Admin里把分组的菜单项改成独立显示其实很简单,主要有两种常用方式,根据你的配置习惯选就行:
方法一:针对单个Admin类设置(推荐)
不管你是用注解还是YAML配置Admin服务,只需要把对应的group参数设为null,这个Admin的菜单项就会脱离分组,变成独立项。
用注解的情况
在你的Admin类头部添加注解,把group设为null:
<?php namespace App\Admin; use Sonata\AdminBundle\Admin\AbstractAdmin; use Sonata\AdminBundle\Annotation\Admin; /** * @Admin( * label="你的菜单项名称", * group=null, // 关键:设置为null就不会分组 * manager_type="orm" * ) */ class YourEntityAdmin extends AbstractAdmin { // 你的Admin类代码... }
用YAML配置服务的情况
在config/services.yaml里找到你的Admin服务配置,修改tags里的group值为null:
services: App\Admin\YourEntityAdmin: arguments: [~, App\Entity\YourEntity, ~] tags: - { name: sonata.admin, manager_type: orm, label: '你的菜单项名称', group: null }
方法二:全局自定义左侧菜单(适合需要完全自定义的场景)
如果想更灵活地控制整个左侧菜单的结构,可以创建一个自定义的菜单构建器:
- 创建菜单构建器类:
<?php namespace App\Menu; use Knp\Menu\ItemInterface; use Sonata\AdminBundle\Menu\MenuBuilder as BaseMenuBuilder; class CustomSideMenuBuilder extends BaseMenuBuilder { public function createSideMenu(ItemInterface $menu): ItemInterface { // 清空默认菜单,然后手动添加独立项 $menu->addChild('第一个独立项', ['route' => 'sonata_admin_app_yourentity_list']); $menu->addChild('第二个独立项', ['route' => 'sonata_admin_app_anotherentity_list']); return $menu; } }
- 在
config/services.yaml里注册这个服务,替换默认的菜单构建器:
services: App\Menu\CustomSideMenuBuilder: decorates: sonata.admin.menu.side arguments: ['@App\Menu\CustomSideMenuBuilder.inner', '@security.authorization_checker', '@sonata.admin.pool'] tags: - { name: knp_menu.menu_builder, method: createSideMenu, alias: sonata_admin_side }
这样就能完全按照你的需求构建左侧菜单,所有项都是独立的啦!
内容的提问来源于stack exchange,提问作者zbeb
相关产品推荐
相关产品推荐

