1

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

2 回答 2

3

因为错误消息暗示您需要添加“id”参数。您可以使用这样的参数进行重定向。

return $this->redirect()->toRoute('admin', array('action'=>'settings', 'id' => $id));

您没有向我们展示您的控制器操作,但我认为“设置”是您管理模块中的操作。

在这一点上,我无法真正看到管理/设置功能需要什么样的 id,最好先尝试添加 0 或 1 来尝试路由以进行测试。

于 2013-09-18T07:51:31.607 回答
2

路由匹配方法似乎没有“消耗”路由的父节点

更改子路由以包含语法/admin部分

/admin/settings/general[/][:action][/][:id]

或者

/admin/settings[/][:action][/][:id]

应该允许$this->redirect()->toRoute('admin/settings');工作。

于 2014-02-25T17:43:56.030 回答