Symfony 2使用POST重定向

Con*_*tch 12 php request symfony

在Symfony 2中,我在Controller中有以下代码:

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

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

路线是:

route:
    pattern:  /listing/complete/{data}
    defaults: { _controller: FooBundle:Foo:action }
    requirements:
        _method:  POST
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为重定向正在发出GET请求.我也尝试过这种模式,但它与路线不匹配:

route:
    pattern:  /listing/complete
    defaults: { _controller: FooBundle:Foo:action }
    requirements:
        _method:  POST
Run Code Online (Sandbox Code Playgroud)

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

Dam*_*nic 34

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

return $this->redirectToRoute('route', [
    'request' => $request
], 307);
Run Code Online (Sandbox Code Playgroud)

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


chi*_*org 12

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

  • 这不是真的.HTTP/1.1定义的状态代码307,要求浏览器不要更改请求方法. (12认同)
  • 我认为这个答案不再正确 - 请参阅下面的 /sf/answers/2172239051/。 (2认同)