我在zend框架2中重定向子路由时遇到问题。我可以访问控制器和操作但是在重定向时会抛出错误参数“id”。
'admin' => array(
'type' => 'segment',
'options' => array(
'route' => '/admin[/][:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Admin\Controller\Admin',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'settings' => array(
'type' => 'Segment',
'may_terminate' => true,
'options' => array(
'route' => '/general[/][:action][/][:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Admin\Controller\Settings\General',
'action' => 'index',
),
),
),
),
),
我已经重定向到下面的路线,
return $this->redirect()->toRoute('admin/settings');
但它会引发错误,
Missing parameter "id"
答案 0 :(得分:3)
因为错误消息暗示您需要添加“id”参数。您可以使用这样的参数重定向。
return $this->redirect()->toRoute('admin', array('action'=>'settings', 'id' => $id));
您没有向我们展示您的Controller操作,但我认为'settings'是您管理模块中的操作。
此时我无法真正看到管理员/设置功能需要什么样的ID,以及尝试添加0或1以首先尝试路由以进行测试。
答案 1 :(得分:2)
路线匹配方法似乎并没有“消耗”路线的父节点。
更改子路由以包含语法的 / admin 部分
/管理/设定/一般[/] [:动作] [/] [:ID]
或
/管理/设定[/] [:动作] [/] [:ID]
应该允许$this->redirect()->toRoute('admin/settings');
工作。