You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 }

方法二:全局自定义左侧菜单(适合需要完全自定义的场景)

如果想更灵活地控制整个左侧菜单的结构,可以创建一个自定义的菜单构建器:

  1. 创建菜单构建器类:
<?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;
    }
}
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:40:53