2012-06-27 75 views
8

在Symfony的2我已經在我的控制器下面的代碼:Symfony的2重定向使用POST

// 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

可能的重複http://stackoverflow.com/q/5576619/569101 – j0k

回答

11

重定向POST請求是不可能的,因爲瀏覽器將不得不重新發送POST數據(它不這樣做)。你應該做什麼,而不是在這種情況下使用forwarding.

+11

這不是真的。 HTTP/1.1定義的狀態碼307,它要求瀏覽器不要改變請求方法。 – gphilip

+0

我認爲這個答案不再正確 - 請參閱下面的https://stackoverflow.com/a/31031986/261332。 – userfuser

1

當我使用$this->generateUrl與傳遞的參數時,我有同樣的錯誤與你。然而,我的重定向工作時,我嘗試這樣做:

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

(我知道這不會幫助你那麼多現在)

+0

我沒有看到區別!在這兩種方式中,param1都像URL中的GET參數一樣。 –

23

最新做POST請求重定向(截至Symfony的2.6)的方式僅僅是:

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

代碼307保留請求的方法,而redirectToRoute()是快捷方式的方法。

+0

太棒了!確切地說,對我來說也是如此。 (Symfony 3.1.4) – Ren

+0

太棒了!哦,爲什麼我幾年前不知道這個... – userfuser