我正在为我的公司制定一个调查系统,我在系统中进行了设置,以便有两种方式来进行调查。
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中放一个整数,它认为我在控制器中加载了一个方法。
感谢您的帮助!
答案 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)。