CodeIgniter:使用URL段指向函数

时间:2009-07-09 20:04:19

标签: php codeigniter

我正在为我的公司制定一个调查系统,我在系统中进行了设置,以便有两种方式来进行调查。

1)新调查者没有先前信息

2)调查已经发出并创建了一个会话。

如果我希望我的网址看起来像: mydomain.com/SurveySystem/index.php/survey/$surveyID

($ surveyID是要进行的调查的整数)

第二种情况是我们为考生创建链接。我希望URL看起来像这样:
mydomain.com/SurveySystem/index.php/survey/$surveySessionID/$guestID

在我的Survey课程中,我将其设置如下:

function index(){

$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中放一个整数,它认为我在控制器中加载了一个方法。

感谢您的帮助!

2 个答案:

答案 0 :(得分:7)

使用URI routing覆盖默认的控制器/函数/参数映射。

示例application/config/routes.php

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

加分:您也可以删除index.php/部分,请参阅Removing the index.php file

答案 1 :(得分:2)

我的问题是,如果网址不友好,为什么你会关心它看起来像什么?从用户的角度来看,它不是语义。是的,您应该删除index.php。耦合URL重写,整个事情应该从:

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

mydomain.com/survey/

您的CI类方法可以简化为“接受”或“提交”,以及随后的“审核”。

应使用Cookie或CI的会话类来管理会话。如果您需要跟踪URI中的状态,请将特定于调查的“会话”和“guestID”合并为一个具有base64编码的段。

最后,根据建议使用路线,您的应用无法知道要加载的调查ID。它需要捕获“:num”并将其提供给take_survey:

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

如果您在/ survey之后将数字ID作为第一个分段,则需要在该分段之后放置另一个路径来处理该分段是会话ID的情况:

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

$ 1和$ 2分别是会话ID和访客ID。就个人而言,我会说这是不好的形式。您的细分受众群的语义含义会崩溃:除非您始终可以保证这些路线已到位,否则很难确定第一个数字细分受众群的含义(是调查ID还是会话ID)。