如何讓symfony在登錄頁面後保留POST數據?在symfony登錄頁面後保留POST參數
例如,cookie在用戶填寫表單時已過期。提交表單後,用戶將重定向到登錄頁面。並且在成功登錄後,他將重定向回到表單的「操作」url,而不需要初始表單中的任何POST數據。
在symfony中是否有任何機制來處理這些數據,或者我必須寫自己的?
順便說一句,我使用sfGuardPlugin
如何讓symfony在登錄頁面後保留POST數據?在symfony登錄頁面後保留POST參數
例如,cookie在用戶填寫表單時已過期。提交表單後,用戶將重定向到登錄頁面。並且在成功登錄後,他將重定向回到表單的「操作」url,而不需要初始表單中的任何POST數據。
在symfony中是否有任何機制來處理這些數據,或者我必須寫自己的?
順便說一句,我使用sfGuardPlugin
我寫了一個簡單的過濾器之前做的一切。也許你可以擴展它的功能,你可以使用,這是
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
我希望它能幫助。
我對symfony框架的先驗知識,而是一個重定向後,你失去了這些信息似乎正常的我。 發佈變量綁定到唯一的HTTP請求。執行重定向意味着通常執行第二個HTTP請求。您無法存儲POST變量。 您應該使用SESSION變量。
是的,這是正常的,我試圖找到一個解決方案, – kipelovets 2009-10-11 10:40:25
您必須將其存儲在$ _SESSION中。請確保你已呼籲在session_start(),那麼你可以做這樣的事情:
foreach($_POST as $key => $value){
$_SESSION[$key] = $value;
}
,或者只是將其存儲在會話中的子陣列。
$_SESSION['previousPost'] = $_POST;
我不具有與交向框架的任何expierience,但這將完成這項工作。
這是正確的方式,但我正在尋找一個symfony風格的解決方案 – kipelovets 2009-10-11 10:41:43
你可以給額外的參數來重定向在symfony中,像這樣:
$this->redirect('module/action?var='.$request->getParameter('id'));
$this->redirect('module/action?var=2');
關當然,這不是很聰明,送這樣的密碼。
用戶會話可能是一種選擇,而是試圖重定向到一個新的動作
我認爲Flash屬性會是一個很好的折衷。與可以工作的會話不同,這些值只能存儲到下一頁。
http://www.symfony-project.org/book/1_2/06-Inside-the-Controller-Layer#Flash%20Attributes
foreach($_POST as $key => $value){
$this->getUser()->setFlash($key, $value);
}
閃光燈屬性將自動在下一次請求被清除。
我幾乎可以肯定,做一個$ this-> forward()實際上會發送所有的發佈數據。
謝謝,這幫了我) – kipelovets 2009-10-11 10:39:49