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.
相关产品推荐
相关产品推荐

