在ZF2中重定向子路由会引发错误

时间:2013-09-18 07:39:22

标签: php redirect zend-framework2

我在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" 

2 个答案:

答案 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');工作。