用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6037|回复: 9
收起左侧

举例说明如何继承控制器

[复制链接]
发表于 2009-6-23 18:42:47 | 显示全部楼层 |阅读模式
(为避免其他人重走弯路,写了个简短教程。)

功能:
继承控制器。

实例:
1、创建system\application\libraries\MY_Controller.php 文件,在文件中这样定义继承控制器:
class BaseController extends Controller {...

2、创建system\application\controllers\blog.php 文件,调用基本控制器:
class Blog extends BaseController{...

备注:
MY_是文件名,不是类名。
发表于 2009-6-24 13:54:46 | 显示全部楼层
对有助于重用代码
发表于 2009-6-28 01:26:40 | 显示全部楼层
没效果
发表于 2009-6-28 10:28:45 | 显示全部楼层
CI加载基本类库的顺序是先用户扩展或自定义的类,然后才是系统类。
要慎重哦。
 楼主| 发表于 2009-7-23 09:20:33 | 显示全部楼层
没有效果应该是构造函数没有继承基类。

        class Blog extends BaseController
        {
                function Blog()
                {
                        parent::BaseController();  // 注意这里。
                        ...........  
                }
                .........
        }
发表于 2009-7-23 14:04:22 | 显示全部楼层
... 不太提倡改动system里的东西。。。 如真有需要,那也要在项目里作出说明文件。
免得CI升级的时候。。SYSTEM覆盖了现有的改动。。。 而且。每次升级。都必须去修改回来。很是麻烦。
 楼主| 发表于 2009-7-24 09:17:27 | 显示全部楼层
没有改动system里的任何代码。

为什么要扩展(继承)控制器呢?代码重用。

比如,每个页面需要验证用户是否登录,你就可以很方便地将验证的代码写在BaseController类里面,这样可以避免将验证的代码写在每个控制页面。还有,如果各个页面具有某些相同的部分,也可以写到BaseController类里面,即保持页面的短小,又方便将来的维护,其中的好处很多。
发表于 2010-11-25 01:28:51 | 显示全部楼层
问题是这个 “libraries\MY_Controller.php ” 是有缺陷的,

  不能导入模型:在MY_Controller.php  内使用 $this->load->model('article_model');  会出错。


  所以这个控制器不同于app/controllers/  目录下的控制器。
发表于 2013-3-27 11:45:47 | 显示全部楼层
我放libraries下面没成功,放core下面成功了。。。。
发表于 2013-3-27 12:05:31 | 显示全部楼层
wxlreg 发表于 2013-3-27 11:45
我放libraries下面没成功,放core下面成功了。。。。

这个教程比较老了,请参考手册。

本版积分规则