2015-07-18 19 views
0

我控制器剛剛完成處理形式,並Symfony2的:從一個頁面發送任意POST數據到下一個

if ($form->isValid()) 
{ 
    // Persist my data. 
    // ... 

    // Now move on to the next page. 
    return $this->redirectToRoute('page2'); 
} 

但我想通過變量來使用POST該頁面。即類似於:

$this->redirectToRoute('page2', array('state' => 'wonderful')); 

這顯然會將它作爲GET參數傳遞。人們建議使用redirect 307s and forwarding,但他們只是一起轉發當前請求。我需要做的是用我的任意消息創建一個新的請求。我怎樣才能做到這一點?

回答

0

不知道這是否會工作,但值得一試:

// Add here whatever you need to the request 
$request->initialize(
    $request->query->all(), 
    $request->request->all(), 
    $request->attributes->all(), 
    $request->cookies->all(), 
    $request->files->all(), 
    $request->server->all(), 
    $request->getContent()); 

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

代表您重定向客戶端,並有使POST請求。

控制器:

if ($form->isValid()) 
{ 
    return $this->render('redirect.html.twig'); 
} 

redirect.html.twig:

<html> 
<body onload="document.frm1.submit()"> 
    <form action="{{path('page2')}}" method="POST" name="frm1"> 
     <input type="hidden" name="state" value="wonderful" /> 
    </form> 
</body> 
</html> 

順便說一句,你可以綁定後的參數Symfony的形式,並使其再模板。

+0

JavaScript似乎不是一個特別乾淨的解決方案。無論如何,謝謝你。 – Druckles

0

您可以使用session

在初始控制器

在其他

$request=$this->get('session')->get('request') 

或者你可以使用cookies

$response->headers->setCookie(new Cookie('request', $request)); 

- >

$response->headers->getCookie('request')); 
0

您不能直接模擬POST。
如果你必須使用POST發送,你必須使用:

檢查或詢問你是否是表格。
我覺得奇怪的是必須在項目中的另一條路線上發送POST數據。

相關問題