Я использую Symfony 2.7 с Sonata Admin Bundle для управления некоторыми продуктами и изображениями продуктов. Я использовал рецепт Sonata Admin Cookbook: https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_file_uploads.html для изображений.
Поскольку с изображением должен быть связан идентификатор продукта, я хочу отключить ссылку «Добавить новое» на панели инструментов администратора Sonata и на верхней панели инструментов, чтобы любое загруженное изображение имело связанный продукт. На самом деле единственное место, где изображения могут быть добавлены, находится на странице добавления / редактирования продукта.
Я пытался удалить маршрут, как это, в соответствии с некоторыми ответами, найденными здесь: Панель управления Sonata Admin: настройка действий для каждого объекта
protected function configureRoutes(RouteCollection $collection)
{
$container = $this->getConfigurationPool()->getContainer();
if ($container->get('request')->get('_route') == 'sonata_admin_dashboard') {
$collection->remove('create');
}
}
Но это решение не является хорошим, потому что, если кэш инициализируется при доступе к панели администратора, маршрут удаляется везде, но если кэш инициализируется на другой странице, маршрут будет присутствовать на всех страницах, включая панель мониторинга. потому что администратор Sonata проверяет в шаблонах, существует ли маршрут при отображении ссылки.
Итак, мне нужен маршрут, чтобы существовать и удалить ссылку. Можно ли это сделать с помощью конфигурации или мне нужно переписать шаблоны?
В вашем классе администратора:
use Sonata\AdminBundle\Route\RouteCollection;
protected function configureRoutes(RouteCollection $collection)
{
$collection->remove('create');
}
Вы также можете удалить Удалить, Показать и т. Д.
Проверьте : 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');
}
В конфигурации администратора вашей сонаты, где вы определяете своих администраторов, удалите тег «group». Это выглядит примерно так.
services:
sonata.admin.images:
class: AppBundle\Admin\ImageAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: "Content", label: "Manage images" }
arguments:
...
(Удалить group: "Content"
или как там у вас настроена группа)
Это поместит ваше изображение администратора в отдельный блок под названием «по умолчанию».
Затем явно определите, какие блоки вы показываете на приборной панели, оставив «по умолчанию»:
sonata_admin:
dashboard:
groups:
Content: ~
AnotherGroup: ~