Sonataadminbundle: несколько разделов администратора для одного объекта
У меня есть класс сущности Page
со столбцом type=integer
. Когда я это сделаю:
<service id="sonata.admin.pages" class="Main\ProgramBundle\Admin\PageAdmin">
<tag name="sonata.admin" manager_type="orm" group="dashboard" label="Pages"/>
<argument />
<argument>Main\ProgramBundle\Entity\Page</argument>
<argument>SonataAdminBundle:CRUD</argument>
</service>
<service id="sonata.admin.groups" class="Main\ProgramBundle\Admin\GroupAdmin">
<tag name="sonata.admin" manager_type="orm" group="stories" label="Groups"/>
<argument />
<argument>Main\ProgramBundle\Entity\Page</argument>
<argument>SonataAdminBundle:CRUD</argument>
</service>
Короче говоря, обе секции работают на одном и том же объекте, за исключением того, что каждый из них имеет разные запросы и формы.
Но происходит то, что соната всегда выполняет Admin/GroupAdmin, даже если я выбираю PageAdmin. Как это сделать?
Ответы
Ответ 1
У меня недостаточно репутации, чтобы добавить комментарий к предыдущему ответу, но в нем отсутствует следующая информация:
Вам также необходимо определить уникальное значение $baseRouteName в дополнение к $baseRoutePattern в ваших классах администратора:
protected $baseRouteName = 'admin_vendor_bundlename_adminclassname';
protected $baseRoutePattern = 'unique-route-pattern';
Вам нужно всего лишь сделать это для одного класса, но подумайте над тем, чтобы сделать это в обоих, чтобы было ясно, что происходит.
Ответ 2
Соната создает маршруты автоматически на основе ваших имен сущностей. Итак, если у вас есть 2 класса администратора, есть конфликт. Вы должны настроить другой шаблон маршрута.
Добавьте это свойство в Main\ProgramBundle\Admin\GroupAdmin.php:
protected $baseRoutePattern = 'page-group';
Ответ 3
Вы наверняка нашли свое решение, но другим способом сделать это было бы создание родительского класса и наследование с использованием наследования mapping. Тогда у вас может быть другой репозиторий, а администратор сонаты не будет работать по-другому.