CodeIgniter 2:如何多次扩展CI_Controller?

2022-08-30 16:03:36

我通过创建一个放置在应用程序/核心目录中的MY_Controller.php成功地扩展了CI_Controller类。

核心/My_Controller.php看起来像这样:

class MY_Controller extends CI_Controller {

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

然后,当我创建普通控制器时,它们看起来像这样:

class Home extends MY_Controller {

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

    function index()
    {
        $this->load->view('home');
    }
}

我正在创建一个管理后端,我希望控制器扩展一个不同的基类,而不是My_Controller。这样我就可以拥有管理控制器的常用方法(即authentication_check等)。

我无法弄清楚的是,我如何创建另一个扩展CI_Controller控制器。

目标是让管理控制器扩展与前端控制器不同的基类。

管理基本控制器将如下所示:

class MY_Admin_Controller extends CI_Controller {

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

用于管理页面的普通控制器:

class Admin_home extends MY_Admin_Controller {

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

    function index()
    {
        $this->load->view('admin_home');
    }
}

问题是,要扩展CI_Controller类,您必须将控制器文件命名为PREFIX_Controller.php并将其放在core/目录中。但是我想要两个控制器类,它们不能具有相同的文件名。


答案 1

你只是把两者都放在同一个文件中,我有一个与此完全相同的项目。

我们只有管理员和正常的扩展控制器在文件中,工作正常。MY_Controller.php

使用或其他扩展文件的主要原因是,CodeIgniter 会在加载基文件(无论是库、帮助程序等)时自动启动它们,您可以在这些文件中使用许多类。MY_Controller

编辑:

您甚至不需要调用它们或 ,我们有 和 在 文件中MY_Admin_ControllerMY_ControllerAdmin_ControllerUser_ControllerAjax_ControllerMY_Controller


答案 2

你正在做的事情是正确的。您只需要目录中的所有这些文件。这是Phil Sturgeon关于这个的帖子:application/core


http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRYhttp://philsturgeon.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY/

诀窍是使用Phil在他的帖子中描述的函数。__autoload()


推荐