我正在为我的公司开发一个调查系统,我在系统中设置了它,因此有两种方式进行调查。
1)新的调查者没有事先的信息
2)调查已发出,并创建了会话。
在第一种情况下,我希望我的URL如下所示:
mydomain.com/SurveySystem/index.php/survey/$surveyID
($surveyID是要进行的调查的整数)
第二种情况是,我们为考生创建了一个链接。我希望URL看起来像这样:
mydomain.com/SurveySystem/index.php/survey/$surveySessionID/$guestID
在我的Survey类中,我将其设置为:
函数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所在的位置,它会认为我在控制器中加载了一个方法。
谢谢你的帮助!
发布于 2009-07-09 20:08:58
使用URI routing覆盖默认的控制器/函数/参数映射。
示例:application/config/routes.php中的
$route['survey/:num'] = "survey/take_suvey";奖励:您还可以删除index.php/部分,请参阅Removing the index.php file。
发布于 2010-06-30 11:35:57
我的问题是,有了一个不友好的URL,你为什么要关心它看起来是什么样子呢?从用户的角度来看,它不是语义的。是的,您应该删除index.php。再加上URL重写,整个事情应该从以下方面简化:
mydomain.com/SurveySystem/index.php/survey/????
至
mydomain.com/survey/
您的CI类方法可以简化为"take“或"submit”,以及随后的“审查”。
应使用cookies或CI的会话类来管理会话。如果您需要跟踪URI中的状态,请使用base64编码将特定于调查的“会话”和"guestID“合并到一个段中。
最后,使用建议的路线,您的应用程序将无法知道要加载的调查ID。它需要捕获":num“并将其提供给take_survey:
$route['survey/(:num)'] = "survey/take_survey/$1";
如果将数字ID作为/survey之后的第一个数据段,则需要在该数据段之后放置另一个路由,以处理该数据段是会话ID的情况:
$route['survey/(:num)/(:num)'] = "survey/session_manager/$1/$2";
其中$1和$2分别是会话ID和来宾ID。就我个人而言,我会说这是一种糟糕的形式。分段语义分解:很难确定第一个数字分段的含义(是调查ID还是会话ID),除非您始终可以保证这些路由已就位。
https://stackoverflow.com/questions/1106165
复制相似问题