在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请求?路线会是什么样的,我是否必须在控制器中做任何事情才能实现?
答案 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'))
(我知道现在对你没什么帮助。)