2009-07-09 96 views
1

我正在爲我的公司開發一個調查系統,並將它安裝在系統中,以便有兩種方式進行調查。CodeIgniter:針對具有URL段的功能

1)新的調查狩沒有先驗信息

2)調查已經送出和會話的創建。

在一個情況下,我想我的URL看起來像:
mydomain.com/SurveySystem/index.php/survey/$surveyID

($ surveyID被調查的整數取)

第二種情況是我們爲考生創建一個鏈接。我想URL看起來像這樣:
mydomain.com/SurveySystem/index.php/survey/$surveySessionID/$guestID

在我的調查類我把它設置爲以下幾點:

功能指數(){

$segments = $this->uri->total_segments(); 

if($segments == 1){ 
    echo "no surveyID set"; 
    return; 
} 

if($segments == 2){ 
    $this->take_survey($this->uri->segment(2)); 
} 

if($segments == 3){ 
    $this->survey_session($this->uri->segment(3), $this->uri->segment(4)); 
} 

}

當沒有信息被傳遞的它回聲就好了。 但是,如果我嘗試把一個整數在surveyID是它認爲我正在加載控制器中的方法。

謝謝你的幫助!

回答

7

使用URI routing覆蓋默認的控制器/函數/參數映射。

例:application/config/routes.php

$route['survey/:num'] = "survey/take_suvey"; 

獎勵:您也可以刪除index.php/部分,見Removing the index.php file

+0

感謝您的回答!那正是它是什麼。 我試圖刪除index.php,但是當我在項目級別放置.htaccess並添加: RewriteEngine on RewriteCond $ 1!^(index \ .php | images | robots \ .txt) RewriteRule ^(。* )$ /index.php/$1 [L] 我總是得到一個apache錯誤: -/ – whobutsb 2009-07-09 20:15:50

2

我的問題是,對於一個不友好的URL,你爲什麼關心它看起來像什麼呢?從用戶的角度來看,它不是語義的。是的,你應該刪除index.php。耦合的URL重寫,整個事情應該從減少:

mydomain.com/SurveySystem/index.php/survey/????

mydomain.com/survey/

並且可以降低你的CI類方法來 「取」 或 「提交」並隨後進行「審查」。

會話應該使用cookie或CI的會話類來管理。如果您需要跟蹤URI中的狀態,請使用base64編碼將特定於調查的「會話」和「guestID」組合爲一個段。

最後,根據建議使用路線,您的應用程序將無法知道要加載的調查ID。這將需要捕獲「:NUM」,並餵它take_survey:

$route['survey/(:num)'] = "survey/take_survey/$1";

如果你把數字ID爲第一段後/調查,你需要放置一個需要處理的話後,另一條路線如該段是一個會話ID:

$route['survey/(:num)/(:num)'] = "survey/session_manager/$1/$2";

凡$ 1和$ 2分別會話ID和旅客ID。就個人而言,我會說這是不好的形式。細分的語義意義不成立:除非您始終能夠保證這些路線到位,否則很難確定第一個數字段的含義(是調查ID還是會話ID)。