【问题标题】:Child Admin route is not being generated - Sonata Admin Bundle未生成子管理员路由 - Sonata Admin Bundle
【发布时间】:2015-04-22 13:26:16
【问题描述】:

我正在尝试将管理员设置为 Sonata Admin Bundle 中其他管理员的子级。

我有 2 个管理类:

  • 分类管理
    该类包含以下方法

    protected function configureSideMenu(MenuItemInterface $menu, $action, AdminInterface $childAdmin = null)
    {            
         $id = $this->getRequest()->get('id');
    
         $menu->addChild(
             $this->trans('Projects'),
             array('uri' => $this->getChild('sonata.admin.project')->generateUrl('list', array('id' => $id)))
         );
    }
    
  • 项目管理员
    此类包含protected $parentAssociationMapping = 'category';
    category 是模型类中表示多对一关联的属性。

我在 CategoryAdmin 的服务配置中添加了以下几行

calls:
    - [ addChild, ["@sonata.admin.project"]]

没有使用此配置生成子管理员的路由。 SideMenu(顶部菜单)中的链接指向/admin/project/list?childId=1&id=1

这是CategoryAdmindump() 的孩子的输出

array:1 [▼
    "sonata.admin.project" => ProjectAdmin {#406 ▶}
]

这意味着我的子管理员的配置似乎是正确的。我不知道为什么没有生成子管理员的路由。

我希望有人能给我一个提示,问题可能是什么。

【问题讨论】:

    标签: symfony sonata-admin symfony-sonata sonata


    【解决方案1】:

    下一代奏鸣曲编码员注意事项: 如果你的路线没有被生成,首先检查你没有做:

    protected function configureRoutes(RouteCollection $collection)
    {
        //clear all routes except given !!!
        $collection->clearExcept(array('list', 'show'));
    }
    

    我花了两天时间...

    【讨论】:

    • 可能只是救了我几天!
    【解决方案2】:

    您的管理类中是否覆盖了 $baseRouteName 和 $baseRoutePattern ?

    如果这样做,Sonata 将生成具有相同名称的子路由和父路由,从而导致父路由覆盖子路由。

    【讨论】:

    • 有没有办法解决这个问题?我必须定义 $baseRouteName$baseRoutePattern 因为否则 Sonata 会拒绝我的无供应商捆绑包(例如 src/AppBundle/ )
    • 如果使用 Dev-master 版本的 SonataAdminBundle 没有问题,那么这个 bug 已经解决了 (github.com/sonata-project/SonataAdminBundle/pull/3250)。如果没有,您可以覆盖 getBaseRoutePattern 和 getBaseRouteName 来修复该行为。
    【解决方案3】:

    我在为自己解决问题时遇到了这个问题,并决定分享解决方案,这花了我几个小时的调试时间......

    在这种情况下,生成正确 uri 的唯一方法是使用 low-level routeGenerator,它不会在 generateMenuUrl 方法中提出任何奏鸣曲建议。

    首先,您必须调试应用中的路线(包括由奏鸣曲自动生成的)。

    php bin/控制台调试:路由器

    例如我有 3 个嵌套级别

    大厅 -> 座位方案 -> 部门

    我的路线如下:

      adminHall_list                             ANY      ANY      ANY    /admin/hall/list
      adminHall_create                           ANY      ANY      ANY    /admin/hall/create
      adminHall_edit                             ANY      ANY      ANY    /admin/hall/{id}/edit
      adminHall_delete                           ANY      ANY      ANY    /admin/hall/{id}/delete
      adminHall_adminScheme_list                 ANY      ANY      ANY    /admin/hall/{id}/scheme/list
      adminHall_adminScheme_create               ANY      ANY      ANY    /admin/hall/{id}/scheme/create
      adminHall_adminScheme_edit                 ANY      ANY      ANY    /admin/hall/{id}/scheme/{childId}/edit
      adminHall_adminScheme_delete               ANY      ANY      ANY    /admin/hall/{id}/scheme/{childId}/delete
      adminHall_adminScheme_adminSector_list     ANY      ANY      ANY    /admin/hall/{id}/scheme/{childId}/sector/list
      adminHall_adminScheme_adminSector_create   ANY      ANY      ANY    /admin/hall/{id}/scheme/{childId}/sector/create
      adminHall_adminScheme_adminSector_edit     ANY      ANY      ANY    /admin/hall/{id}/scheme/{childId}/sector/{childChildId}/edit
      adminHall_adminScheme_adminSector_delete   ANY      ANY      ANY    /admin/hall/{id}/scheme/{childId}/sector/{childChildId}/delete
    

    在管理类中 baseRouteName 和 baseRoutePattern 已被覆盖。

    // HallSchemeAdmin.php
    $this->baseRouteName = 'adminScheme';
    $this->baseRoutePattern = 'scheme';
    

    要生成一个最深度列表网址

    $url = $admin->getRouteGenerator()->generate('adminHall_adminScheme_adminSector_list', [
        'id' => $admin->getRequest()->get('id'),
        'childId' => 555, // put required id
    ]);
    

    它会产生这样的url:

    /admin/hall/495/scheme/555/sector/list

    如果您需要编辑网址,您也必须提供childChildId 参数:

    $url = $admin->getRouteGenerator()->generate('adminHall_adminScheme_adminSector_edit', [
        'id' => $admin->getRequest()->get('id'),
        'childId' => 555, 
        'childChildId' => 12345 
    ]);
    

    结果是: /admin/hall/495/scheme/555/sector/12345/edit

    【讨论】:

      猜你喜欢
      • 2015-02-27
      • 2019-06-05
      • 2014-01-29
      • 2016-09-03
      • 2015-12-30
      • 2016-07-07
      • 2016-04-20
      • 1970-01-01
      • 2016-10-11
      相关资源
      最近更新 更多