删除特定路线的添加新(创建)按钮

Removing Add new (create) button for specific route

我正在尝试为 /stageserver/list 路线删除添加新按钮。

我试过这个代码:

public function getBatchActions()
{
    $actions = parent::getBatchActions();

    if($this->hasRoute('/stageserver/list'))
    {
        $actions['remove'] = 'create';
    }

}

我已经尝试了下一个代码,但它删除了所有其他管理部分中的该路由。

public function configureRoutes(RouteCollection $collection)
{
   $collection->remove('create');
}

我在 Sonata 文档中找不到具体的路线删除,或者我有 错过了。

使用 Sonata,您的管理员与单个实体相关。

例如,我有一个名为 AppBundle\Entity\StageServer.

的实体

我创建了一个管理服务来管理这个实体:

admin.stage_server:
    class: AppBundle\Admin\StageServerAdmin
    public: true
    arguments: [~, AppBundle\Entity\StageServer, ~]
    tags:
        - { name: sonata.admin, manager_type: orm }

还有专用于此服务的 class :

<?php

namespace AppBundle\Admin;

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Route\RouteCollection;

class StageServerAdmin extends AbstractAdmin
{
    protected function configureRoutes(RouteCollection $collection)
    {
        $collection->remove('create');
    }
}

这应该足以消除创建 AppBundle\Entity\StageServer 对象的能力。


编辑

使用 configureActionButtons 方法的解决方案仅在进入 list 操作时删除 create 按钮。

<?php

namespace AppBundle\Admin;

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Route\RouteCollection;

class StageServerAdmin extends AbstractAdmin
{
    public function configureActionButtons($action, $object = null)
    {
        $buttons = parent::configureActionButtons($action, $object);
        if (in_array($action, array('list'))) {
            unset($buttons['create']);
        }

        return $buttons;
    }
}