2010-06-03 46 views
0

我是CodeIgniter的新手,我仍然在學習(很多)。重定向CI問題

因此,我有一種觀點,當我提交表單時,我會通過動態地瀏覽到正確的URL來「調用」控制器,例如網站/刪除

class Site extends Controller { 

    function index(){$this->load->view('...')} 

    function delete() { 
     $this->site_model->delete_row(); 
     $this->index(); 
    } 

    } 

現在,當該行爲完成(刪除行)我打電話$ this-> index();重定向到我的初始頁面(這很好),但我的網址保持:站點/刪除。我想我的網址是../site/index(或沒有/索引)

任何幫助將不勝感激:-)。

回答

2

到目前爲止,我發現了一些解決這樣的:

代替:

$this->index(); 

我使用:

redirect('site'); 

有誰知道這是一個好的做法呢?

+1

重定向對我來說很好,但它會導致服務器發送額外的響應頭,因此它需要更多的開銷。 – caseyamcl 2010-06-03 12:06:20

+0

「附加響應標題」不完全正確,它會觸發一個全新的請求(和響應)。但是,有一點額外的開銷。這仍然是正確的解決方案。通常在這種情況下,您還會將某些內容粘貼到CI的flash數據中,索引方法會讀取並轉發給用戶(因此您可以告訴他們操作已成功完成)。 – Sid 2010-06-03 13:35:11

1

重定向是你應該使用的。

在用戶指南: http://codeigniter.com/user_guide/helpers/url_helper.html

他們使用它,如果一個用戶登錄後檢查取決於它們是否與否,他們重定向到一個不同的地方。

另外,請注意,重定向後的任何代碼都不會運行。確保完成所需的一切後重定向。

0

我的首選方法是採取相同的方法處理,然後由用戶看到。

如果您之後去/ site/delete,作爲用戶怎麼辦?它將不得不檢測並拋出錯誤(顯示消息)或重定向到適當的頁面。/site/delete沒有意義。例如,如果用戶在刪除後通常會看到一個概述,那麼我的表單將被髮布到/ site/index;與index快速檢查條件並呼籲_delete()在同一個控制器,在其正常工作之前。

這樣,如果用戶刷新頁面或按下'後退',事情應該與他們看起來一致。

另一個例子是/ settings/edit會發布給自己 - 這意味着它可以對帖子進行操作並顯示任何輸出(例如驗證錯誤)。這意味着我的網站上沒有/settings/do_edit位置,也意味着用戶可以安全地返回/settings/edit,並查看錶單以編輯其設置。

我想這是一個客觀的問題,我會鼓勵對我的觀點提出反饋意見,但這是我避免你所問的問題的方法。

+0

這裏可能遇到的潛在問題是,如果重新發布(通過刷新)將會產生不希望的結果(例如,將其他產品添加到購物籃中)。在這種或那種情況下使用重定向,並處理nonces(這也可以防止CSRF攻擊)。 – Sid 2010-06-04 13:01:18

+0

嗨西德。謝謝你的評論。我想nonce是我創建表單時定義的一次性使用標記?然後一旦使用或在時間限制到期後將其扔掉?這可能會導致對我來說一個全新的SA問題! – Kurucu 2010-06-04 14:52:25

0
$this->index(); 

調用函數中的函數只是執行該函數內的功能。 而url從未改變。

用於更改您應該使用的網址。

redirect (base_url().'site'); 

但你應該在構造函數中加載url助手。