exp 发表于 2016-12-11 23:34:26

关于核心CI_Controller

我想在扩展为MY_Controller ,然后User_Controller ,Public_Controller在去继承MY_Controller   这三个文件都在Core下面作为基础Controller 使用并且在config中配置加载   但是在Controller下做继承使用时    只用MY_Controller 能用,有大神这么做吗?我用的CI3.0

Hex 发表于 2016-12-12 13:44:21

CI 只能支持一级继承。但你可以把 MY_Controller User_Controller 都放到 MY_Controller.php 里。编程时候脑子要灵活一些~

exp 发表于 2016-12-12 14:12:52

Hex 发表于 2016-12-12 13:44
CI 只能支持一级继承。但你可以把 MY_Controller User_Controller 都放到 MY_Controller.php 里。编程时候 ...

1. 你说的方法我试过   但是不是想要的最佳效果
2,我想弄明白的是 我做的为什么就行不通

Michael锐生 发表于 2016-12-12 14:20:37

exp 发表于 2016-12-12 14:12
1. 你说的方法我试过   但是不是想要的最佳效果
2,我想弄明白的是 我做的为什么就行不通   ...

1、你可以说一下你要的最佳效果
2、你弄的在config中配置加载,行不通的原因只能是加载前后的关系,放在core里面是实例化控制器之前加载,你放到config中的话,控制器都已经实例完了,这时候再加载,那你是不是会报错?

exp 发表于 2016-12-12 14:49:21

Michael锐生 发表于 2016-12-12 14:20
1、你可以说一下你要的最佳效果
2、你弄的在config中配置加载,行不通的原因只能是加载前后的关系,放在c ...

一个单独的功能模块 会用一个基础的ControllerUser的话User_Controller   admin 的话Admin_Controller
我是在config中最后做的 __autoload()去加载core下的核心

Hex 发表于 2016-12-12 15:01:37

exp 发表于 2016-12-12 14:12
1. 你说的方法我试过   但是不是想要的最佳效果
2,我想弄明白的是 我做的为什么就行不通   ...
为什么行不通,很简单,CI 不支持,CI 原本就只支持一级继承,你可以理解成功能限制。。。可能 CI 的作者认为一级继承已经足够了。。。。

Hex 发表于 2016-12-12 15:05:16

exp 发表于 2016-12-12 14:49
一个单独的功能模块 会用一个基础的ControllerUser的话User_Controller   admin 的话Admin_Control ...

在 index.php 里增加 autoload 我觉得是可行的,index.php 本身就是可以自己随便修改的文件。

lostincoding 发表于 2016-12-15 14:27:11

Hex 发表于 2016-12-12 13:44
CI 只能支持一级继承。但你可以把 MY_Controller User_Controller 都放到 MY_Controller.php 里。编程时候 ...

并不是这样的喔,CI是支持多级继承的,我在实际中也是这么使用的。
core中有个MY_Controller是继承的CI_Controller,
core中还有个Admin_Controller继承了MY_Controller。
controllers里创建的控制器是可以继承Admin_Controller的。

但是有个注意的地方就是CI在加载时只会自动加载config配置文件中配置的这个前缀的文件:
$config['subclass_prefix'] = 'MY_';
所以需要在MY_Controller.php文件中加载一下Admin_Controller.php
像这样:require_once 'Admin_Controller.php';
然后就可以在创建Admin_Controller时使用中继承Admin_Controller了。

所以楼主这么做是没问题的,只是少了一个小步骤,就是需要在MY_Controller.php尾部中增加下两行代码:
require_once 'User_Controller.php';
require_once 'Public_Controller.php';

当然,另一个需要注意的就是集成的构造函数中要这样:
public function __construct()
    {
       //必须的
      parent::__construct();
    }

Hex 发表于 2016-12-15 18:26:40

lostincoding 发表于 2016-12-15 14:27
并不是这样的喔,CI是支持多级继承的,我在实际中也是这么使用的。
core中有个MY_Controller是继承的CI_C ...
你这样写肯定是可以搞定,但是这不是“CI本身就支持”,本身就支持的意思是不用写任何额外代码就能支持。比如你加载一个类库,根本不需要 include,这属于本身支持,所以,我才说 CI 本身是不支持多级继承的。

exp 发表于 2016-12-27 11:31:01

lostincoding 发表于 2016-12-15 14:27
并不是这样的喔,CI是支持多级继承的,我在实际中也是这么使用的。
core中有个MY_Controller是继承的CI_C ...

是的 但是就是想的就是这样的
之前在国外看到的视频 是在config里面用autoload来加载另外的两个核心控制器的当然他拿的版本是CI2.0
但是3.0 好像不支持
页: [1] 2
查看完整版本: 关于核心CI_Controller