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

时间:2017-07-19 13:53:29

标签: php symfony sonata-admin symfony-sonata

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

我尝试过这段代码:

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

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

}

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

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

我无法找到索纳塔文档中的特定路线删除,或者我可能找到 错过了。

1 个答案:

答案 0 :(得分:2)

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

示例,我有一个名为AppBundle\Entity\StageServer的实体。

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

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

这个服务的专用课程:

<?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方法仅在create操作时移除list按钮的解决方案。

<?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;
    }
}