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;
}
Надеюсь, что соответствует вашим потребностям.