Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 346
VMC Avatar asked Sep 28 '15 11:09

VMC


3 Answers

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

like image 98
Kaizoku Gambare Avatar answered Oct 07 '22 00:10

Kaizoku Gambare


Try this in the admin class:

public function getDashboardActions() {
    $actions = parent::getDashboardActions();
    unset($actions['create']);
    return $actions;
}
like image 8
Dasaaf Avatar answered Oct 07 '22 02:10

Dasaaf


In the following you can see a list of options to hide Sonatadmin functions:

protected function configureRoutes(RouteCollection $collection)
{
    $collection->remove('create');
    $collection->remove('edit');
    $collection->remove('delete');
    $collection->remove('show');
    $collection->remove('export');
}
like image 7
Shadi Akil Avatar answered Oct 07 '22 02:10

Shadi Akil