2010-11-01 81 views
1

我目前正在使用ACL的zend框架站點上工作。從PHP Zend-Framework站點發送POST

ACL工作並使用數據庫來存儲privaliges。到目前爲止,我所做的是,在preDispatch中捕獲用戶想要去的地方,如果他們需要登錄到那裏,頁面將顯示登錄表單。我還捕獲了用戶是否提交了表單並存儲了數據(位置和表單數據)。目前沒有問題。

用戶提交登錄表單,然後我檢查是否有位置發送給他們,這裏再次沒有問題,這是有效的。

不過,我希望能夠以他們現在autherised提交原始表單數據 - 呼叫唯一的問題是,如果我將用戶重定向到頁面,來:

$this->getRequest()->isPost() 

因爲它不是」失敗發佈帖子請求。

我可以將用戶轉發到成功登錄的頁面,並且在preDispatch中將$ _POST設置爲原始捕獲的數據,因爲原始POST仍然有效,所以這種方式仍然有效,但我認爲這不是正確的方法這樣做 - 特別是URL - 顯然頁面顯示正確,表單已被正確提交,但URL是登錄過程。

很明顯,我可以改變使用$this->getRequest()->isPost(),但由於有大量需要改變,我希望不必這樣做。

+0

可能重複[重定向到新頁面/ POST數據(PHP/Zend)](http://stackoverflow.com/questions/1309456/redirect-to-new-page-w-post-data-php- zend) – Gordon 2010-11-01 13:35:43

+0

這是非常相似的東西,但在同一時間不同 - 我目前基本上使用該解決方案,但正如我所說,我最終與用戶顯示POST的結果,但在錯誤的URL,這是不非常重要,但我更喜歡URL是正確的。 – Scoobler 2010-11-01 14:35:26

+0

@Scoobler檢查Netbeans 7.0。它有很好的重構選項。您只需點擊幾下即可更改所有的選擇。 – takeshin 2010-11-01 16:29:46

回答

0

通常的做法(在許多網站上都會看到這種方式)將會在會話中存儲表單數據和請求的操作,然後將用戶重定向到登錄頁面。當登錄被授權時,您閱讀會話以查看任何待處理操作,重新加載表單並使用會話中的數據填充它(正確地清除會話後的任何待處理操作)。用戶只需再次點擊提交。

另一種方法是使用HttpClient並以POST的形式提交數據。

+0

感謝這個想法,但在這裏會有兩個問題 - 我將動作和控制器配置給用戶,直到他們的autoeisation過期(可能是超時),以便知道他們來自哪裏並返回他們會更加耗費時間。我更希望它能在用戶進行授權後立即繼續用戶的行爲。你有沒有關於使用HttpClient的更多細節 - 我嘗試了文檔說,但似乎沒有得到它的工作,因爲我想。 – Scoobler 2010-11-01 14:41:24

+0

您可以在這裏找到Zend_Http_Client文檔:http://framework.zend.com/manual/1.11/en/zend.http.client.advanced.html。另外,你可以在stream_context_create()中使用fopen(),就像這個例子一樣:http://www.php.net/manual/en/function.stream-context-create.php#72017 – netcoder 2010-11-01 14:49:09

+0

我已經嘗試了兩種這些方法現在看起來似乎和zend轉發請求的過程非常類似 - 它們提交數據並獲取結果,然後在當前頁面中顯示它們 - 這留下了錯誤的URL。 – Scoobler 2010-11-01 16:49:32