Sonata管理员:如何仅从仪表板中删除“添加新”按钮?

我正在使用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管理仪表板:为每个实体配置操作

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

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

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

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


答案 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


答案 2

在管理类中尝试以下操作:

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

推荐