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

VMC picture VMC · Sep 28, 2015 · Viewed 8.9k times · Source

I'm using Symfony 2.7 with Sonata Admin Bundle to manage some products and product images. I used the Sonata Admin Cookbook recipe: https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_file_uploads.html for images.

Because an image must have a product id associated with it, I want to disable the "Add New" Image link from the Sonata admin dashboard and from the top toolbar, so any uploaded image will have an associated product. Actually the only place where images should be allowed to be added is in the product add/edit page.

I've tried to remove the route like this, according to some answers found here: 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');
    }
}

But this solution is not good, because, if the cache is initialized when I access the admin dashboard, the route gets removed everywhere, but if the cache is initialized on a different page, then the route will be present on all pages, including dashboard, because Sonata Admin validates in templates if the route exists when displaying the link.

So, I need the route to exist and to remove the link. Can this be done using configuration or I have to rewrite the templates?

Answer

Kaizoku Gambare picture Kaizoku Gambare · Mar 15, 2016

In your admin class :

use Sonata\AdminBundle\Route\RouteCollection;

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

You can also remove Delete, Show etc ...

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