好的,我需要的东西可能听起来相当容易(或者很复杂? - 我不知道),但这里是:
在CodeIgniter中,给定一个控制器,例如test
你能做到:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class test extends CI_Controller {
public function sub($param1="", $param2="")
{
}
}
?>
这意味着您可以访问:
但是,如果我想“省略”sub
部分会发生什么?
好的,所以我想在控制器的index
功能中做同样的事情。喜欢:
public function index($param1="", $param2="")
{
}
这样我就可以直接访问:
然而,考虑到CI的内部设计,当我尝试这个时,它一直在寻找一个显然不存在的someparam1' method in the
test`控制器。
那么,你会怎么做呢?
P.S。
1。请允许我们避免与.htaccess
有关的解决方案以及模糊的重定向,让我们坚持使用最适合CI的方法(如果有的话)。
2。不建议我创建适当的函数(而不是使用一些变量访问器) - 如果我想这样做,我已经做到了
3。参数最好应该是SEO友好的URL的一部分,而不是与$_GET
等一起使用(例如mysite.com/test/?param1=someparam1¶m2=someparam2)
答案 0 :(得分:3)
在config / routes.php
中试试$route['test/(:any)'] = 'test/index/$1';
答案 1 :(得分:0)
您必须像这样访问您的网站:
或者你可以在routes.php文件中重写
$route['test/(.*)/(.*)'] = 'test/index/$1/$2';
答案 2 :(得分:0)
您可以使用一些路由配置:
//if arguments start by a number
$route['test/(^[0-9].+)'] = 'test/index/$1';
//if argument start by a set of choice
$route['test/(str1|str2|str3)(:any)'] = 'test/index/$1$2';
//this can prevent from name collision between methods and first argument
或者,在你的控制器中使用魔法:
如果该控制器中的任何方法与URI不匹配,则将调用此方法。
public function __call($name, $args) {
call_user_func_array(array($this, 'index'), $args );
}