如何使用奏鸣曲管理员创建自定义列表

Posted

技术标签:

【中文标题】如何使用奏鸣曲管理员创建自定义列表【英文标题】:how to create custom list with sonata admin 【发布时间】:2018-04-26 17:28:00 【问题描述】:

我找不到(理解)如何将项目和分类添加到左侧管理菜单。 没有详细的教程如何做到这一点。 我可以将项目添加到 sonata.admin.block.admin_list 但放在管理菜单旁边 enter image description here

【问题讨论】:

【参考方案1】:

你需要在你的路由中添加一个路由:

admin.blog_post:
    class: db306\CoreBundle\Admin\BlogPostAdmin
    arguments: [~, db306\CoreBundle\Entity\BlogPost, ~]
    tags:
        -  name: sonata.admin, manager_type: orm, group: Content, label: Blog post 
    public: true

admin.category:
    class: db306\CoreBundle\Admin\CategoryAdmin
    arguments: [~, db306\CoreBundle\Entity\Category, ~]
    tags:
        -  name: sonata.admin, manager_type: orm, group: Content, label: Category 
    public: true

这将在屏幕截图上显示的菜单上显示一个“内容”选项卡,其中包含 2 个选项:“博客文章”和“类别”

【讨论】:

我创建了一些实体,它们都出现在仪表板的左侧,在菜单中,这工作正常。但是我想做的是在不创建实体的情况下添加选项卡,并且当您单击此菜单选项卡时,只有要更改的权限的内容!那可能吗?谢谢【参考方案2】:

由于菜单是通过遍历注册管理员自动构建的,因此仅添加一个管理服务条目就没有(据我所知)简单的解决方案。但这很容易。您可以注册一个 MenuBuilderListener 并添加任意数量的新项目...

在你的 services.yml 中

app.menu_listener:
    class: AppBundle\Listener\MenuBuilderListener
    tags:
        -  name: kernel.event_listener, event: sonata.admin.event.configure.menu.sidebar, method: addMenuItems 

在你的 MenuBuilderListener 类中

public function addMenuItems(ConfigureMenuEvent $event)

    $event->getMenu()->addChild($event->getFactory()->createItem('Test entry', ['route' => 'custom_route']));
    ...

在您的菜单构建后调用该事件......您可以在之后更改现有菜单条目或添加新条目。请注意,管理员服务通常会负责创建路由,如果您没有管理员,则必须自己构建路由。

【讨论】:

【参考方案3】:

是的,你可以这样做:

sonata_admin:
title:      Supplier Portal
title_logo: bundles/supplierportalbackend/img/logo.png
show_mosaic_button: false
security:
    handler: sonata.admin.security.handler.role
templates:
    layout:              SonataAdminBundle::layout.html.twig
    search:              SonataAdminBundle:Core:search.html.twig
    search_result_block: SonataAdminBundle:Block:block_search_result.html.twig
    base_list_field:     SonataAdminBundle:CRUD:base_list_field.html.twig

dashboard:
    blocks:
        -  position: left, type: sonata.admin.block.admin_list 
    # Customize user portal menu by setting links
    groups:
        sonata.admin.group.purchase_order_item.open:
            on_top:          true
            label:           Open Items
            label_catalogue: messages
            icon:            '<i class="fa fa-square-o"></i>'
            items:
                - supplier_portal_backend.admin.purchase_open_order_item

        sonata.admin.group.purchase_order_item.confirmed:
            on_top:          true
            label:           Confirmed Items
            label_catalogue: messages
            icon:            '<i class="fa fa-check-square-o"></i>'
            items:
                - supplier_portal_backend.admin.purchase_confirmed_order_item

        sonata.admin.group.purchase_order_item.shipped:
            on_top:          true
            label:           Shipped Items
            label_catalogue: messages
            icon:            '<i class="fa fa-truck"></i>'
            items:
                - supplier_portal_backend.admin.purchase_shipped_order_item

        sonata.admin.group.purchase_order_item.all:
            on_top:          true
            label:           All Items
            label_catalogue: messages
            icon:            '<i class="fa fa-th-list"></i>'
            items:
                - supplier_portal_backend.admin.purchase_order_item

        sonata.admin.group.administration:
            on_top:          true
            label:           Users
            label_catalogue: messages
            icon:            '<i class="fa fa-users"></i>'
            items:
                - supplier_portal_backend.admin.user
            roles: [ ROLE_SUPER_ADMIN ]

【讨论】:

以上是关于如何使用奏鸣曲管理员创建自定义列表的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 形式的奏鸣曲字段类型

在奏鸣曲管理员中隐藏下载按钮

在奏鸣曲管理实体的显示模板中添加自定义表单

奏鸣曲管理员列表可编辑与编辑/显示冲突

如何在奏鸣曲管理列表视图中添加“后备标签”

奏鸣曲管理员:列表始终使用默认语言