我想要的网页应用程序部分的URL结构如下:
/user/FooBar42/edit/privacy
,我希望这可以路由到控制器:user,function:edit,FooBar42
和privacy
作为参数(按此顺序)。 我应该如何使用CodeIgniter完成此操作?
答案 0 :(得分:3)
在application/config/routes.php
中定义此route应该有效:
$route['user/(:any)/edit/(:any)'] = "user/edit/$1/$2";
但请注意,上述路线中的(:any)
会匹配多个细分受众群。例如,user/one/two/edit/three
会调用edit
控制器中的user
函数,但只传递one
作为第一个参数,two
作为第二个参数。
使用正则表达式(:any)
替换([a-zA-Z0-9]+)
,只允许一个字母数字值,长度至少为1 。这减轻了上述问题,允许/
允许允许多个段。现在,如果使用user/one/two/edit/three
,则会显示404页面。
$route['user/([a-zA-Z0-9]+)/edit/([a-zA-Z0-9]+)'] = "user/edit/$1/$2";
答案 1 :(得分:1)
您还可以使用CI控制器的重新映射选项
http://ellislab.com/codeigniter/user-guide/general/controllers.html#remapping
做这样的事情:
public function _remap($method, $params = array())
{
// check if the method exists
if (method_exists($this, $method))
{
// run the method
return call_user_func_array(array($this, $method), $params);
}
else
{
// method does not exists so you can call nay other method you want
$this->edit($params);
}
}