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

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

在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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。