Sonataadminbundle:同一实体的多个管理部分

时间:2012-10-10 20:47:29

标签: symfony symfony-sonata sonata-admin

我的实体类Pagetype=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>

简而言之,两个部分都在同一个实体上工作,但每个部分都有不同的查询和表单。

但是,即使我选择PageAdmin,奏鸣曲总是会执行Admin / GroupAdmin。怎么做?

3 个答案:

答案 0 :(得分:36)

我没有足够的声誉为上一个答案添加评论,但缺少以下信息:

除了管理类中的$ baseRoutePattern之外,您还需要定义唯一的$ baseRouteName值:

protected $baseRouteName = 'admin_vendor_bundlename_adminclassname';

protected $baseRoutePattern = 'unique-route-pattern';

你只需要对一个课程这样做,但考虑在两个课程中都要这样做,以便清楚地知道发生了什么。

答案 1 :(得分:4)

Sonata会根据您的实体名称自动创建路线。因此,如果您有2个管理类,则存在冲突。您必须配置不同的路由模式。

将此属性添加到Main \ ProgramBundle \ Admin \ GroupAdmin.php:

protected $baseRoutePattern = 'page-group';

答案 2 :(得分:-1)

您当然找到了解决方案,但另一种方法是创建父类并使用inheritance mapping继承。然后,您可以拥有不同的存储库,而奏鸣曲管理员将无法以不同的方式工作。