2013-10-17 76 views
4

我以前用來總是寫$this->load->view()加載視圖。我注意到有一個問題,尤其是當涉及到地址欄中的重新提交和URL時。相反,我開始使用redirect('controller/function','refresh')來實現相同的目的。我的問題是:這是一個好方法,還是令人不悅?我覺得我的代碼在這種方式上更加順暢,但我肯定想知道這是否會在以後出現任何副作用。Codeigniter重定向與加載視圖

例如用例:

$id = $this->user_model->buildAccount($name, $email); 

if(isset($id) && $id != '') { 
    $this->session->set_userdata('id', $id); 
    redirect('users/details'); 
} else { 
    redirect('members/'); 
} 
+0

http://stackoverflow.com/a/32866456/412591 –

回答

3

當談到CI你採取任何方法是好的,恕我直言,你的做法是就好了。在上面的代碼中,您在創建會話後重定向用戶,您還應該檢查​​函數中會話的有效性。無論如何,你必須致電load->view()加載一個視圖,無論它在任何功能。因此,加載視圖的位置並不重要。

+0

是我不經常檢查會話和令牌,以確保該網站的所有部分的認證接入。你很高興分享你的意見。感謝隊友 – spacemonkey

+0

Happie幫忙:D。考慮接受答案,如果它幫助你。 @spacemonkey –

1

您需要使用PRG - Post/Redirect/Get模式。 重定向和加載視圖不一樣,如果你有頁面內容中的表單。

Scenario: 

有一種觀點,view_1與表單中的帳戶借記資金。在view_1中提交表單後,您希望通過成功消息跳轉到view_2,並且您有兩個選項可以實現相同。 1.使用成功消息加載view_2或者2.使用攜帶成功消息的閃存數據重定向到view_2。

選項1:成功的消息 負載view_2當您提交表單並刷新,它會導致重新提交,並從該賬戶,這不應該是情況下會引起多種借記卡。您也可以看到警報彈出「確認表單重新提交」。

選項2:這是正確的答案 PRG

PRG - 郵政/重定向/獲取 PRG是防止這意味着一些重複的表單提交,提交形式的Web開發設計模式(view_1) - >重定向 - >獲取(view_2)

Under the hood 

帶有此狀態代碼的HTTP響應將在位置標題字段中額外提供一個URL。用戶代理(例如網絡瀏覽器)通過具有此代碼的響應被邀請,以對位置字段中指定的新URL進行第二次(否則相同)請求。

HTTP 1.0與HTTP 302或HTTP 1.1與HTTP 303(「其他」)響應代碼,以確保在這種情況下,Web用戶的瀏覽器可以安全地刷新服務器響應,而不會導致初始HTTP POST請求重新提交。

Source