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

Zel*_*jko 22 symfony symfony-sonata sonata-admin

我有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>
Run Code Online (Sandbox Code Playgroud)

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

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

Bar*_*rry 37

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

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

protected $baseRouteName = 'admin_vendor_bundlename_adminclassname';

protected $baseRoutePattern = 'unique-route-pattern';
Run Code Online (Sandbox Code Playgroud)

你只需要对一个类进行此操作,但考虑在两个类中执行此操作以清楚地了解正在发生的事情.

  • 将此实体添加到另一个管理员时,您仍会遇到问题.Sonata将触发一个错误,告知有许多管理员注册了.这是通过在add函数中添加'admin_code'=>'sonata.product.admin.product'来解决的.这将告诉sonata具体使用哪个管理员. (3认同)

pul*_*der 5

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

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

protected $baseRouteName = 'page_group';
protected $baseRoutePattern = 'page-group';
Run Code Online (Sandbox Code Playgroud)

  • 我尝试的第一件事正是如你所说;仅将该属性放在一个管理类中。那不起作用,之后我才尝试了这两种情况。 (3认同)