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

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. Как это сделать?

4b9b3361

Ответ 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. Тогда у вас может быть другой репозиторий, а администратор сонаты не будет работать по-другому.