我如何在codeigniter中扩展一个类?

时间:2014-07-05 20:01:42

标签: codeigniter class controller extends

这是我的控制者:常见:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Common extends CI_Controller {

    public function __construct() { 

        parent::__construct();

    }
    public function test(){
        echo 1;
    }

}

这是第二个控制器(寄存器):

class Register extends Common {

    public function __construct() { 

        parent::__construct();

    }
    public function user_registration(){
        $this->test();
    }
}

当我访问user_registration函数时,它会显示以下错误: 致命错误:班级&#39;普通&#39;在第3行的/home/attilana/domains/attila-naghi.com/public_html/application/controllers/register.php中找不到

如何从类寄存器的user_registration函数中访问common类中的test()函数?

1 个答案:

答案 0 :(得分:2)

在Codeigniter中调用来自另一个控制器的控制器即使在这样的示例中也是不可能的,因为它不允许请求中的多个控制器实例。由于这种情况,你实际上有三个主要选择。

首先,您可以使用CI_Controller前缀扩展Codeigniter的基本控制器MY_,以便Codeigniter将其识别为公共基类。这里的主要思想是编写在大多数控制器中常见的方法。

如果我们看一下您的示例并尝试按上述方式进行调整:

最初,您需要扩展CI_Controller类:

class MY_Controller extends CI_Controller {

    public function __construct() { 
        parent::__construct();
    }

    public function test(){
        echo 1;
    }

}

其次,创建您的寄存器控制器,如下所示:

class Register extends MY_Controller {

    public function __construct() { 
        parent::__construct();
    }

    public function user_registration(){
        $this->test();
    }
}

另一种可能性是您可以创建一个帮助程序并全局调用该函数,或者您可以创建一个库并将其加载到您的控制器中并调用它。

有关详细信息,请参阅此处:http://ellislab.com/codeigniter/user-guide/general/core_classes.html或旧文档:https://github.com/EllisLab/CodeIgniter/wiki/MY-Controller