我的实体类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>
简而言之,两个部分都在同一个实体上工作,但每个部分都有不同的查询和表单。
但是,即使我选择PageAdmin,奏鸣曲总是会执行Admin / GroupAdmin。怎么做?
答案 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继承。然后,您可以拥有不同的存储库,而奏鸣曲管理员将无法以不同的方式工作。