CodeIgniter自定义控制器继承结构详解与代码示例

叶初
叶初
发布时间:2026-10-14 | 3人浏览过
原创

在CodeIgniter项目开发中,为减少重复代码并统一管理权限,通常需要将各功能模块的控制器继承自一个公共的基础控制器。本文将详细说明如何配置并使用 MY_Controller 来实现这一架构。

核心实现原理

CodeIgniter 允许开发者创建自定义的基础控制器。默认情况下,系统会在 application/core/ 目录下查找以 MY_ 开头的文件。只要该类继承了框架核心的 CI_Controller,应用中的其他控制器即可继承这个自定义类,从而复用其中的逻辑。

这种机制常用于需要全局执行的操作,例如:后端管理员的 Session 状态校验、API 接口的 Token 验证、公共数据的初始化加载等。

第1步:检查或修改子类前缀配置

  • 目的:确认自定义控制器文件的前缀命名规则。
  • 入口:application/config/config.php
  • 动作:打开配置文件,找到 $config['subclass_prefix'] 项。默认值通常为 'MY_'。
  • 完成状态:确认该值为 My_(注意大小写敏感)或其他期望的字符串,这将决定你在 core 目录新建的文件必须以什么开头。

第2步:创建基础控制器 MY_Controller

  • 目的:建立所有自定义控制器的共同父类,注入通用方法。
  • 路径:application/core/MY_Controller.php
  • 关键参数:类名必须与文件名一致;构造函数需调用 parent::__construct() 以保证 CI 环境正常初始化。
<?php
class MY_Controller extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        // 在此处添加全局通用的逻辑,例如加载模型、配置变量
    }
}

实战应用:后端权限管理

假设我们需要开发一个后台管理系统,要求每个页面都要先判断用户是否已登录。我们可以基于 MY_Controller 再封装一层 AdminBase。

第3步:构建 AdminBase 通用控制器

  • 目的:针对后台业务的特定逻辑(如 Session 校验)进行二次封装。
  • 路径:application/core/AdminBase.php(注意:如果只作为业务分层,也可放在 application/controllers/admin/AdminBase.php,但需确保其继承了正确的父类且能自动加载,推荐放在 core 下或通过 autoload 管理,此处以 standard 实践展示继承关系)。
  • 动作:新建 PHP 文件,继承 MY_Controller,并在构造函数中编写检查逻辑。
<?php
class AdminBase extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
        
        // 示例:简单的 Session 登录校验
        if (!$this->session->userdata('is_admin_logged_in')) {
            redirect('login'); // 未登录则跳转至登录页
        }
    }
}

第4步:具体业务控制器继承 AdminBase

  • 目的:实际的业务控制器只需关注自身功能,无需重复编写登录检查代码。
  • 路径:application/controllers/admin/Blog.php
  • 动作:让 Blog 类继承 AdminBase。
<?php
class Blog extends AdminBase
{
    public function __construct()
    {
        parent::__construct();
        // AdminBase 的构造函数会自动执行 Session 校验
        // 此处只负责 Blog 特有的初始化
    }

    public function index()
    {
        // 业务逻辑... 此时确信用户已登录
    }
}

前台结构的同样应用

对于前台公开页面,也可以采用类似的模式创建一个 HomeBase 类来继承 MY_Controller。这有助于区分“需要登录的后台逻辑”和“公开访问的前台逻辑”,使代码结构更加清晰且易于维护。

总结

通过合理利用 MY_Controller 及多层次的继承结构,可以有效解耦 CodeIgniter 项目中的通用逻辑与业务逻辑。这不仅提升了代码的复用率,也让权限管理和环境配置变得更加集中和规范。

以上就是CodeIgniter自定义控制器继承结构与MY_Controller详细内容的介绍,更多关于PHP框架架构优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表