使用ZF3,我想访问以下网址:
/dossier/add
/dossier/edit/2
/dossier/edit/2/droit/add
/dossier/edit/2/droit/edit/3
...
这是我的路由配置:
'dossier' => [
'type' => Segment::class,
'options' => [
'route' => '/dossier[/][:action][/:dosid]',
'constraints' => [
'action' => '[a-zA-Z0-9_-]+',
'dosid' => '[0-9_-]*|b[0-9]+|all'
],
'defaults' => [
'controller' => Controller\DossierController::class,
'action' => 'add',
],
],
'may_terminate' => true,
'child_routes' => [
'droit' => [
'type' => Segment::class,
'options' => [
'route' => '/droit[/][:action][/:droid]',
'constraints' => [
'action' => '[a-zA-Z0-9_-]+',
'droid' => '[0-9_-]*|b[0-9]+|all'
],
'defaults' => [
'controller' => Controller\DroitController::class,
'action' => 'add',
],
]
]
]
]
父级和子级路由都具有“操作”参数。 直接调用此配置即可正常工作(即在浏览器中输入网址“ / dossier / edit / 3 / droit / delete / 2”)。 但是,使用viewHelper Url构建URL:
$this->url('dossier/droit', ['action' => 'delete', 'dosid' => 3, 'droid' => 2]);
产生URL:
/dossier/delete/3/droit//2
显示创建(“添加”)视图而不是URL时:
/dossier/edit/3/droit/delete/2
在主题Zf2 view helper URL child route with same params中,我知道我可以为每个子动作创建一条子路径,因此摆脱了第二个“动作”参数,但这似乎不太正确。
我不禁想知道为什么我能够同时拥有Segment类型的父路由和子路由,并且仍然被卡住,因为在不破坏ZF将URL路由到控制器的方式的情况下,无法重命名“ action”参数方法。
“ droit”路线必须是“ dossier”的子路线,因为它需要档案的ID(并且将档案的ID放在表单中的隐藏输入中似乎是更糟糕的解决方案)。
我想念什么吗?有没有更好的解决方案?