索纳塔管理:如何删除"添加新"仅从仪表板按钮


Sonata Admin: How to remove "Add New" button from dashboard only?

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

因为图像必须有一个与之关联的产品id,我想从索纳塔管理仪表板和从顶部工具栏禁用"添加新"图像链接,所以任何上传的图像将有一个相关的产品。实际上,唯一应该允许添加图像的地方是在产品添加/编辑页面。

我试过这样删除路由,根据这里找到的一些答案:索纳塔管理仪表板:配置每个实体的动作

protected function configureRoutes(RouteCollection $collection)
{
    $container = $this->getConfigurationPool()->getContainer(); 
    if ($container->get('request')->get('_route') == 'sonata_admin_dashboard') {
        $collection->remove('create');
    }
}

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

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

在你的admin类中:

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

还可以删除Delete, Show等

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

在管理类中试试:

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

在下面你可以看到隐藏Sonatadmin函数的选项列表:

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

在您定义管理员的sonata管理配置中,删除"group"标记。它看起来像这样。

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

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

这将把你的图像管理放在一个名为"default"的单独块中。

然后,显式定义在仪表板上显示哪些块,省略"default":

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