控制器是这样的:
class Abc extends CI_controller{
public function index(){...}
public function f1(){...}
}
如果网址为http://host/app/Abc/index
,则会获得功能索引
如果网址为http://host/app/Abc/f1
,则会获得函数f1
如果url为http://host/app/Abc
,则会获得函数索引,因为它是默认的
但如果网址为http://host/app/Abc/f2
则会打印404未找到
我预计,如果网址为http://host/app/Abc/f2
,则可以转为索引功能
如果不能这样做,我想自动添加新功能,我该怎么办?
修改
我想在一个特定的类中使用它,我可以编辑全局路由吗?怎么样?
答案 0 :(得分:9)
您可以通过两种方式首先编辑routes.php文件并将404_override更改为控制器功能,这会将您的所有404请求重定向到该控制器功能
form
$route['404_override'] = 'welcome';
to
$route['404_override'] = 'ABC/index';
第二个选项在控制器内,您可以使用_remap方法/函数来检查是否存在函数/方法。控制器将是这样的
class Abc extends CI_controller{
function _remap($method_name = 'index'){
if(!method_exists($this, $method_name)){
$this->index();
}
else{
$this->{$method_name}();
}
}
public function index(){...}
public function f1(){...}
}
答案 1 :(得分:0)
相同,但使用参数。 如果没有,参数将无法通过,分页,过滤,参数将无法工作。
class Abc extends CI_controller{
function _remap($method_name = '',$args){
if(!method_exists($this, $method_name)){
//$this->index($args);
call_user_func_array (array($this,'index'), $args);
}
else{
//$this->{$method_name}();
call_user_func_array (array($this,$method_name), $args);
}
}
public function index($a,$b,$c){...}
public function f1($a,$b){...}
}
答案 2 :(得分:-1)
让我在这里做一些笔记,并在我最喜欢的地方制作一个集合,非常感谢!
class Abc extends CI_controller{
function _remap($method_name = 'index'){
if(!method_exists($this, $method_name)){
$this->index($method_name);
}
else{
$this->{$method_name}($method_name);
}
}
public function index($method_name='index'){...}
}
有效地,我只想要这个_remap函数,因为我请求的方法都不存在 这很好!是!我突然看到了光!