为什么我的参数不会出现在网址中?

时间:2014-11-25 15:35:51

标签: php zend-framework zend-framework2

为什么我的动作和参数不会显示在我的网址中?我正在使用zend 2框架。我有搜索操作和结果操作。下面是我的搜索操作(我测试时不使用变量):

        return $this->forward()->dispatch('Application\Controller\Index', array(
        'action'     => 'results',
        'zip'   => '12345',
      ));   

路线是我家乡路线的孩子。

            'results' => array(
                'type' => 'segment',
                'options' => array(
                    'route' => 'results[/:zip]',
                    'defaults' => array(
                        'controller' => 'Application\Controller\Index',
                        'action'     => 'results',
                    ),
                ),
            ),

以下是父路线

'router' => array(
    'routes' => array(
        'home' => array(
            'type' => 'segment',
            'options' => array(
                'route'    => '/',
                'constraints' => array(
                            'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                ),
                'defaults' => array(
                    'controller' => 'Application\Controller\Index',
                    'action'     => 'index',
                ),
            ),

我正在路由到正确的视图,但网址返回www.foo.com而不是www.foo.com/results/12345。

另外如何停止前锋的发布请求?结果页面上有一个表单,在转发之后,此表单再次提交(导致循环)。

1 个答案:

答案 0 :(得分:1)

如果您希望浏览器显示新的URL,则需要执行HTTP重定向,因为转发插件将在相同的请求中分派到新控制器。

通过调用重定向插件替换前转呼叫。

return $this->redirect()->toRoute('home/results/route/name');

这也将解决您仍然将HTTP方法设置为POST的添加问题(因为重定向将是GET请求)。