Подтвердить что ты не робот

Sonata Admin: Как удалить кнопку "Добавить новую" только с панели управления?

Я использую 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 Dashboard: настройка действий для объекта

protected function configureRoutes(RouteCollection $collection)
{
    $container = $this->getConfigurationPool()->getContainer(); 

    if ($container->get('request')->get('_route') == 'sonata_admin_dashboard') {
        $collection->remove('create');
    }
}

Но это решение не годится, потому что, если при доступе к панели администратора администрация кеша инициализируется, маршрут удаляется везде, но если кеш инициализируется на другой странице, маршрут будет присутствовать на всех страницах. включая панель мониторинга, потому что администратор Sonata проверяет в шаблонах, существует ли маршрут при отображении ссылки.

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

4b9b3361

Ответ 2

Попробуйте это в классе admin:

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

Ответ 3

Далее вы можете увидеть список параметров, позволяющих скрыть функции Sonatadmin:

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

Ответ 4

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