Symfony 2使用POST重定向

时间:2012-06-27 14:00:44

标签: php symfony request

在Symfony 2中,我的控制器中有以下代码:

// prepare to render the seller info panel
$response = array(
    'data' => $data,
);

// render the seller info panel
return $this->redirect($this->generateUrl('route', $response));

路线是:

route:
    pattern:  /listing/complete/{data}
    defaults: { _controller: FooBundle:Foo:action }
    requirements:
        _method:  POST

由于重定向正在发出GET请求,因此无效。我也试过这种模式,但它与路线不匹配:

route:
    pattern:  /listing/complete
    defaults: { _controller: FooBundle:Foo:action }
    requirements:
        _method:  POST

我发现路由文档无益。有没有办法可以让重定向发出POST请求?路线会是什么样的,我是否必须在控制器中做任何事情才能实现?

3 个答案:

答案 0 :(得分:34)

执行POST请求重定向的最新方式(从 Symfony 2.6 开始)只是:

return $this->redirectToRoute('route', [
    'request' => $request
], 307);

代码307保留了请求方法,而redirectToRoute()是一种快捷方式。

答案 1 :(得分:12)

重定向POST请求是不可能的,因为浏览器必须重新发送POST数据(它不会重新发送)。在这种情况下,您应该做的是使用forwarding.

答案 2 :(得分:1)

当我使用$this->generateUrl传递参数时,我遇到了同样的错误。但是,当我尝试这个时,我的重定向工作了:

$this->get('router')->generate('route_name', array('param1' => 'paramVal'))

(我知道现在对你没什么帮助。)