我使用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: ~