Администратор сонаты: Как удалить & quot; Добавить новый & quot; кнопка только на приборной панели?

Я использую 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 проверяет в шаблонах, существует ли маршрут при отображении ссылки.

Итак, мне нужен маршрут, чтобы существовать и удалить ссылку. Можно ли это сделать с помощью конфигурации или мне нужно переписать шаблоны?

9

Решение

В вашем классе администратора:

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

12

Другие решения

Попробуйте это в классе администратора:

public function getDashboardActions() {
$actions = parent::getDashboardActions();
unset($actions['create']);
return $actions;
}
4

Далее вы можете увидеть список опций, чтобы скрыть функции Sonatadmin:

protected function configureRoutes(RouteCollection $collection)
{
$collection->remove('create');
$collection->remove('edit');
$collection->remove('delete');
$collection->remove('show');
$collection->remove('export');
}
3

В конфигурации администратора вашей сонаты, где вы определяете своих администраторов, удалите тег «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: ~
0
По вопросам рекламы [email protected]