Child 未生成管理路由 - Sonata Admin Bundle
Child Admin route is not being generated - Sonata Admin Bundle
我正在尝试将管理员设置为 Sonata Admin Bundle 中其他管理员的 child。
我有 2 个管理员 classes:
类别管理员
这个 class 包含以下方法
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)))
);
}
项目管理员
此 class 包含 protected $parentAssociationMapping = 'category';
category
是模型 class 中的 属性 表示 ManyToOne 关联。
我在 CategoryAdmin 的服务配置中添加了以下几行
calls:
- [ addChild, ["@sonata.admin.project"]]
child 管理员的路由未使用此配置生成。 SideMenu(顶部菜单)中的 link 指向 /admin/project/list?childId=1&id=1
这里是 CategoryAdmin
的 children 和 dump()
的输出
array:1 [▼
"sonata.admin.project" => ProjectAdmin {#406 ▶}
]
这意味着我的 child 管理员的配置似乎是正确的。我不知道为什么没有生成 child 管理员的路由。
我希望有人能给我提示,可能是什么问题。
您是否在管理中覆盖了 $baseRouteName 和 $baseRoutePattern class?
如果这样做,Sonata 将生成同名的子路由和父路由,导致父路由覆盖子路由。
下一代奏鸣曲编码器注意事项:
如果你的路线没有被生成,首先检查你没有做:
protected function configureRoutes(RouteCollection $collection)
{
//clear all routes except given !!!
$collection->clearExcept(array('list', 'show'));
}
我花了两天...
我在自己解决问题时遇到了这个问题,并决定分享解决方案,这让我花了好几个调试时间...
在这种情况下生成正确 uri 的唯一方法是使用 低级别 routeGenerator
,它不会提出任何奏鸣曲建议,在 generateMenuUrl
方法。
首先你必须调试应用程序中的路由(包括由奏鸣曲自动生成的)。
php bin/console debug:router
例如我有 3 层嵌套
hall -> seats scheme -> sector
我的路线如下:
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:
$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
如果您需要编辑url,您还必须提供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
我正在尝试将管理员设置为 Sonata Admin Bundle 中其他管理员的 child。
我有 2 个管理员 classes:
类别管理员
这个 class 包含以下方法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))) ); }
项目管理员
此 class 包含protected $parentAssociationMapping = 'category';
category
是模型 class 中的 属性 表示 ManyToOne 关联。
我在 CategoryAdmin 的服务配置中添加了以下几行
calls:
- [ addChild, ["@sonata.admin.project"]]
child 管理员的路由未使用此配置生成。 SideMenu(顶部菜单)中的 link 指向 /admin/project/list?childId=1&id=1
这里是 CategoryAdmin
的 children 和 dump()
array:1 [▼
"sonata.admin.project" => ProjectAdmin {#406 ▶}
]
这意味着我的 child 管理员的配置似乎是正确的。我不知道为什么没有生成 child 管理员的路由。
我希望有人能给我提示,可能是什么问题。
您是否在管理中覆盖了 $baseRouteName 和 $baseRoutePattern class?
如果这样做,Sonata 将生成同名的子路由和父路由,导致父路由覆盖子路由。
下一代奏鸣曲编码器注意事项: 如果你的路线没有被生成,首先检查你没有做:
protected function configureRoutes(RouteCollection $collection)
{
//clear all routes except given !!!
$collection->clearExcept(array('list', 'show'));
}
我花了两天...
我在自己解决问题时遇到了这个问题,并决定分享解决方案,这让我花了好几个调试时间...
在这种情况下生成正确 uri 的唯一方法是使用 低级别 routeGenerator
,它不会提出任何奏鸣曲建议,在 generateMenuUrl
方法。
首先你必须调试应用程序中的路由(包括由奏鸣曲自动生成的)。
php bin/console debug:router
例如我有 3 层嵌套
hall -> seats scheme -> sector
我的路线如下:
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:
$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
如果您需要编辑url,您还必须提供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