2009-10-09 33 views
1

如何讓symfony在登錄頁面後保留POST數據?在symfony登錄頁面後保留POST參數

例如,cookie在用戶填寫表單時已過期。提交表單後,用戶將重定向到登錄頁面。並且在成功登錄後,他將重定向回到表單的「操作」url,而不需要初始表單中的任何POST數據。

在symfony中是否有任何機制來處理這些數據,或者我必須寫自己的?

順便說一句,我使用sfGuardPlugin

回答

1

我寫了一個簡單的過濾器之前做的一切。也許你可以擴展它的功能,你可以使用,這是

class postFilter extends sfFilter 
{ 
    public function execute($filterChain) 
    { 
    // Execute this filter only once 
    if ($this->isFirstCall()) 
    { 
     // reach user object 
     $user = $this->getContext()->getUser(); 
     // request 
     $request = $this->getContext()->getRequest(); 
     // if user unauthenticated and if user posted a form 
     if(!$user->isAuthenticated() AND $request->isMethod('post')) 
     { 
     // now you can save the post parameters 
     $user->setAttribute('param_name', $request->getParameter('post_data')); 
     // or something like that 
     } 
    } 

    // Execute next filter 
    $filterChain->execute(); 
    } 
} 

並添加過濾器filters.yml

post_filter: 
    class: postFilter 

我希望它能幫助。

+0

謝謝,這幫了我) – kipelovets 2009-10-11 10:39:49

0

我對symfony框架的先驗知識,而是一個重定向後,你失去了這些信息似乎正常的我。 發佈變量綁定到唯一的HTTP請求。執行重定向意味着通常執行第二個HTTP請求。您無法存儲POST變量。 您應該使用SESSION變量。

+0

是的,這是正常的,我試圖找到一個解決方案, – kipelovets 2009-10-11 10:40:25

-1

您必須將其存儲在$ _SESSION中。請確保你已呼籲在session_start(),那麼你可以做這樣的事情:

foreach($_POST as $key => $value){ 
    $_SESSION[$key] = $value; 
} 

,或者只是將其存儲在會話中的子陣列。

$_SESSION['previousPost'] = $_POST; 

我不具有與交向框架的任何expierience,但這將完成這項工作。

+0

這是正確的方式,但我正在尋找一個symfony風格的解決方案 – kipelovets 2009-10-11 10:41:43

0

你可以給額外的參數來重定向在symfony中,像這樣:

$this->redirect('module/action?var='.$request->getParameter('id')); 
$this->redirect('module/action?var=2'); 

關當然,這不是很聰明,送這樣的密碼。

用戶會話可能是一種選擇,而是試圖重定向到一個新的動作

1

我幾乎可以肯定,做一個$ this-> forward()實際上會發送所有的發佈數據。