2010-09-01 39 views
2

我在每個需要加載我的應用程序主視圖的函數中使用redirect()(來自uri helper)。它重定向到相同的功能。我的目標是獲得相同的清潔uri,即使當我使用頁面功能(即調用其他控制器)時。這是不錯的做法嗎?我應該什麼時候使用重定向()?是否有其他解決方案來獲得類似的結果?codeigniter使用重定向()

這是一些代碼澄清。

這裏是控制器:

<?php 

    class Main_controller extends Controller 
    { 
     function index() 
     { 
     $this->load->view(page); 
     } 

     function page_feature() 
     { 
     /* some stuff */ 
     redirect('main_controller.php','refresh'); 
     } 
    } 

有了這條路線的規則:

$route['([a-z-A-Z1-9_]+)'] = "main_controller"; 

URI是這樣的:myapp.com/something 在這個頁面上,還有功能調用誰(在提交)main_controller(或其他控制器)的其他功能,如一個形式,例如:

​​

在這個查詢結尾「/ another_controller/method」,我使用重定向('main_controller')顯示新數據的視圖,並保持uri「myapp.com/something」而不是「myapp.com/another_controller /方法」。

我想知道這是好還是不好的做法,以及爲什麼。

回答

6

使用這種重定向是不好的做法;你基本上將加倍服務器請求。

如果您不想在URL中使用函數名稱,只需將表單POST傳遞給控制器​​index()函數,然後根據某些條件調用您需要的函數,例如從窗體傳遞的內容POST數據:

<form action="myapp.com/controller_name" method="post"> 

控制器:

function index(){ 
     if(!empty($_POST['some_form_data'])){ 
      $this->page_feature(); 
     } 
     else{ 
      $this->load->view('page'); 
     } 
} 
function page_feature(){ 
     /* some stuff */ 
     $this->load->view('page_feature'); 
} 

您可能還需要檢查出的_remap()功能。這樣,額外的uri段不被視爲函數調用。

+0

謝謝,這是我一直在尋找。 – Joeyjoejoe 2010-09-02 10:56:00

1

重定向對於防止用戶重新提交表單數據非常有用。如果您只是將您的輸出顯示在您提交的相同網址上,刷新頁面的用戶將始終會收到提示,要求他們重新提交表單。

重定向還會通過使客戶端向服務器再執行一個請求來影響性能,但在大多數情況下這可能可以忽略不計。