Sonata管理面板:配置每个实体的操作


Sonata Admin Dashboard: configure actions per entity

我正在使用SonataAdminBundle作为Symfony2(v2.0.x)支持的网站的管理界面的基础。

在SonataAdmin中添加到仪表板的实体默认具有以下操作:

  • 添加
  • 列表

这对大多数实体来说都很好,但该网站有一些实体的数据不是通过管理界面添加的,即它们是从面向公众的网站输入的。管理员只需要查看它们(在仪表板中列出操作)、编辑或删除它们。管理员不应该能够向这些实体添加数据。

有没有办法配置SonataAdmin面板中单个实体旁边显示的操作?

EntityAdmin类中添加以下

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

要从Admin类中删除单个路由,请使用

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

Symfony 2.1+中,您可以使用clearExcept删除所有路由,除外,如下所示:

public function configureRoutes(RouteCollection $collection)
{
  $collection->clearExcept(array('list', 'edit', 'delete', 'batch'))
}

这样做的好处是,在SonataAdminBundle中添加新操作时,可以保持操作的原样。

Symfony 2.0中,还有一个类似的未记录函数(感谢Jeroen):

public function configureRoutes(RouteCollection $collection)
{
  $collection->removeAllExcept(array('list', 'edit', 'delete', 'batch'))
}