You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codeigniter 3中如何实现多控制器共用同一个__construct方法

CodeIgniter 3 公共构造方法统一实现方案

你可以通过继承自定义核心控制器的方式实现构造逻辑全局复用,操作步骤如下:

  • 第一步:创建自定义核心控制器
    在 application/core 目录下新建 MY_Controller.php 文件,继承CI原生的CI_Controller类,将公共构造逻辑写在这个类中:
<?php
class MY_Controller extends CI_Controller {
    // 定义公共存储属性,所有继承的控制器均可直接调用
    public $data = [];

    public function __construct() {
        parent::__construct();
        $this->data['url'] = base_url();
        // 其他全局公共业务代码都统一写在这里,后续修改仅需调整这一处
    }
}

注意:CodeIgniter 3默认会自动加载前缀为MY_的核心扩展类,这个前缀可以通过修改application/config/config.php中的$config['subclass_prefix']配置项自定义。

  • 第二步:业务控制器继承自定义核心控制器
    所有需要用到公共构造逻辑的业务控制器,不再直接继承CI_Controller,改为继承MY_Controller即可:
<?php
// 示例业务控制器
class Article extends MY_Controller {
    public function lists() {
        // 可以直接使用父类已赋值的data属性
        $this->load->view('article/lists', $this->data);
    }

    // 如果当前控制器需要额外的构造逻辑,显式调用父类构造即可
    public function __construct() {
        parent::__construct();
        // 此处写当前控制器独有的构造逻辑
    }
}

注意事项

  • 如果业务控制器不需要单独定义构造方法,无需额外写任何代码,父类的公共构造逻辑会自动执行
  • 如果业务控制器自己定义了构造方法,必须显式调用parent::__construct(),否则公共构造逻辑不会生效
  • 个别不需要公共构造逻辑的控制器,依旧可以直接继承CI_Controller,不受影响

内容的提问来源于stack exchange,提问作者George B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:06:01