ZF3高级路由-具有操作参数的父级和子级路由

时间:2019-03-18 13:31:42

标签: php zend-framework3 zend-router

使用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放在表单中的隐藏输入中似乎是更糟糕的解决方案)。

我想念什么吗?有没有更好的解决方案?

0 个答案:

没有答案