17

在 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 请求?路线会是什么样子,我是否必须在控制器中做任何事情才能实现?

4

3 回答 3

42

进行 POST 请求重定向的最新方法(从Symfony 2.6开始)很简单:

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

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

于 2015-06-24T16:26:31.930 回答
13

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

于 2012-06-27T14:07:37.007 回答
1

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

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

(我知道它现在对你没有多大帮助。)

于 2012-07-21T18:00:51.657 回答