【问题标题】:Sonata Admin: How to remove "Add New" button from dashboard only?Sonata Admin:如何仅从仪表板中删除“添加新”按钮?
【发布时间】:2015-09-28 11:21:05
【问题描述】:

我正在使用 Symfony 2.7 和 Sonata Admin Bundle 来管理一些产品和产品图像。我使用 Sonata Admin Cookbook 食谱:https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_file_uploads.html 获取图片。

因为图像必须具有关联的产品 ID,所以我想禁用 Sonata 管理仪表板和顶部工具栏中的“添加新”图像链接,因此任何上传的图像都将具有关联的产品。实际上,应该允许添加图像的唯一地方是在产品添加/编辑页面中。

根据此处找到的一些答案,我尝试删除这样的路线:Sonata Admin Dashboard: configure actions per entity

protected function configureRoutes(RouteCollection $collection)
{
    $container = $this->getConfigurationPool()->getContainer(); 

    if ($container->get('request')->get('_route') == 'sonata_admin_dashboard') {
        $collection->remove('create');
    }
}

但是这个解决方案并不好,因为,如果在我访问管理仪表板时初始化缓存,路由会到处被删除,但是如果缓存是在不同的页面上初始化的,那么路由将出现在所有页面上,包括仪表板,因为 Sonata Admin 在显示链接时会在模板中验证路由是否存在。

所以,我需要存在路径并删除链接。这可以使用配置完成还是我必须重写模板?

【问题讨论】:

    标签: php symfony configuration-files sonata-admin dashboard


    【解决方案1】:

    在您的管理员课程中:

    use Sonata\AdminBundle\Route\RouteCollection;
    
    protected function configureRoutes(RouteCollection $collection)
    {
        $collection->remove('create');
    }
    

    您还可以删除删除、显示等...

    检查:https://sonata-project.org/bundles/admin/master/doc/reference/routing.html#removing-a-single-route

    【讨论】:

    • 这将完全删除add/create 按钮。
    • 我不明白你的评论
    • 例如,这也删除了集合表单字段中的创建按钮,而不仅仅是仪表板
    【解决方案2】:

    在管理类中试试这个:

    public function getDashboardActions() {
        $actions = parent::getDashboardActions();
        unset($actions['create']);
        return $actions;
    }
    

    【讨论】:

    • 此方法在 SonataAdminBundle 3.4+ 中的名称为 getActionButtons
    【解决方案3】:

    在下面您可以看到隐藏 Sonatadmin 功能的选项列表:

    protected function configureRoutes(RouteCollection $collection)
    {
        $collection->remove('create');
        $collection->remove('edit');
        $collection->remove('delete');
        $collection->remove('show');
        $collection->remove('export');
    }
    

    【讨论】:

      【解决方案4】:

      在您定义管理员的奏鸣曲管理员配置中,删除“组”标签。它看起来像这样。

      services:
          sonata.admin.images:
              class: AppBundle\Admin\ImageAdmin
              tags:
                  - { name: sonata.admin, manager_type: orm, group: "Content", label: "Manage images" }
              arguments:
                  ...
      

      (删除 group: "Content" 或任何您设置的组)

      这会将您的图像管理员放在一个名为“默认”的单独块中。

      然后,明确定义您在仪表板上显示的块,省略“默认”:

      sonata_admin:
          dashboard:
              groups:
                  Content: ~
                  AnotherGroup: ~
      

      【讨论】:

      • 感谢您抽出宝贵时间回答我的问题。事实上,这是一种从我的仪表板中删除“添加新”链接的方法,但它也会删除“列表”链接,我希望列表可以访问。此外,这不会删除顶部工具栏中的链接。
      猜你喜欢
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 2018-01-30
      • 1970-01-01
      • 2018-04-26
      • 2020-06-13
      • 2018-08-15
      相关资源
      最近更新 更多