Symfony2 - SonataAdmin Bundle

Привет? Я борюсь с SonataAdmin Bundle. Я пытаюсь сделать систему часто задаваемых вопросов.

Вот мой фактический конфиг. С вопросом категории объектов:

services:
    sonata.admin.faq_question:
        class: FM\AppBundle\Admin\Faq\Question
        tags:
            - { name: sonata.admin, manager_type: orm, group: "FAQ", label: "Questions" }
        arguments:
            - ~
            - FM\AppBundle\Entity\Faq\Question
            - ~

    sonata.admin.faq_category:
        class: FM\AppBundle\Admin\Faq\Category
        tags:
            - { name: sonata.admin, manager_type: orm, group: "FAQ", label: "Categories" }
        arguments:
            - ~
            - FM\AppBundle\Entity\Faq\Category
            - ~

С этой системой у меня есть два меню (Вопросы и Категории). Я хотел бы иметь только одно меню, где я вижу вопросы, сгруппированные по категориям.

Как вы думаете, это возможно с конфигурацией по умолчанию Sonata?

Нужно ли переопределить метод listAction в CRUDController.

1 ответ

То, что вам нужно, можно возобновить в двух основных вещах:

  • Скрыть администратора категорий из вашей панели инструментов
  • Переопределить запрос по умолчанию для представления списка вопросов

Для первого (скрыть категории) измените следующее в объявлении сервиса:

sonata.admin.faq_category:
    # ...
    tags:
        - { show_in_dashboard: false, name: sonata.admin, manager_type: orm, group: "FAQ", label: "Categories" }
    # ...

Наконец, добавьте следующее в ваш класс QuestionAdmin:

/**
 * {@inheritDoc}
 */
public function createQuery($context = 'list')
{
    $query = parent::createQuery($context);

    // Assuming the Question entity has a $categories field+association
    $query
        ->leftJoin($query->getRootAliases()[0].'categories', 'c')
        ->groupBy('c.id')

    return $query;
}

Надеюсь, что соответствует вашим потребностям.

Другие вопросы по тегам