23

我有Page带有 column的实体类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>

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

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

4

3 回答 3

41

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

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

protected $baseRouteName = 'admin_vendor_bundlename_adminclassname';

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

你只需要对一个班级这样做,但考虑在两个班级都这样做,以保持清楚发生了什么。

于 2012-11-12T10:31:49.360 回答
4

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

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

protected $baseRouteName = 'page_group';
protected $baseRoutePattern = 'page-group';
于 2012-10-21T09:45:55.737 回答
0

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

于 2013-06-20T21:15:48.890 回答