当我访问具有不存在路由的Class时,如何在codeIgniter中设置默认功能?

时间:2014-08-07 07:36:03

标签: php codeigniter routing

控制器是这样的:

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,则可以转为索引功能 如果不能这样做,我想自动添加新功能,我该怎么办?

修改
我想在一个特定的类中使用它,我可以编辑全局路由吗?怎么样?

3 个答案:

答案 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函数,因为我请求的方法都不存在 这很好!是!我突然看到了光!