我正在使用codeigniter构建教程系统,并希望实现以下URL结构:
问题在于,当我想使用前两种类型的URL时,我需要将参数传递给控制器的索引函数。第一个参数是可选类别,第二个参数是可选的教程ID。我在发布之前做过一些研究,所以我发现我可以添加tutorials/(:any)
之类的路由,但问题是当使用最后一个URL时,此路由也会将add
作为参数传递(/教程/添加)。
我是如何实现这一目标的?
答案 0 :(得分:13)
您的路由规则可以按此顺序排列:
$route['tutorials/add'] = "tutorials/add"; //assuming you have an add() method
$route['tutorials/(:any)'] = "tutorials/index"; //this will comply with anything which is not tutorials/add
然后在你的控制器的index()方法中,你应该能够确定它是否正在传递类别或教程ID!
答案 1 :(得分:9)
我确实认为重新映射必须对您的问题更有用,以防您想要向控制器添加更多方法,而不仅仅是“添加”。这应该完成任务:
function _remap($method)
{
if (method_exists($this, $method))
{
$this->$method();
}
else {
$this->index($method);
}
}
答案 2 :(得分:3)
发布后几分钟,我想我找到了一个可能的解决方案。 (对我感到羞耻)。
在伪代码中:
public function index($cat = FALSE, $id = FALSE)
{
if($cat !== FALSE) {
if($cat === 'add') {
$this->add();
} else {
if($id !== FALSE) {
// Fetch the tutorial
} else {
// Fetch the tutorials for category $cat
}
}
} else {
// Show the overview
}
}
欢迎对此解决方案的反馈!