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

[讨论/交流] CI的控制器 是只能有三层吗?

[复制链接]
发表于 2014-8-15 11:22:30 | 显示全部楼层 |阅读模式
CI的控制器 是只能有三层吗?CI_Controller->My_Controller->Module_Controller
能不能 多几层 更灵活?
发表于 2014-8-25 17:37:49 | 显示全部楼层
本帖最后由 smallerpig 于 2014-8-25 17:39 编辑
Hex 发表于 2014-8-19 13:38
楼主说对了,继承只能有三层。

测试环境 windows 8.1 WampServer Version 2.5 CI 2.2.0
Apache Version :2.4.9   - DocumentationPHP Version :5.5.12   - Documentation
Server Software:

Apache/2.4.9 (Win64) PHP/5.5.12


appliction/core/My_Controller.php:
PHP复制代码
 
<?php
// vim: set expandtab cindent tabstop=4 shiftwidth=4 fdm=marker:
// +----------------------------------------------------------------------+
// | WUXI.SourceCode.Smallerpig                                           |
// +----------------------------------------------------------------------+
// | Copyright (c) 2014, WUXI.SOURCECODE Inc. All rights reserved.        |
// +----------------------------------------------------------------------+
// | Authors: smallerpig. www.smallerpig.com                              |
// |                                                                      |
// +----------------------------------------------------------------------+
 
/**
 * @version  1.0
 * @author   smallerpig
 * @date    
 */

 class Console_Controller extends CI_Controller{
         function __construct(){
                 parent::__construct();
                 echo "Console_Controller</br>";
         }
 }
 
 
 class Test_Controller extends Console_Controller{
         function __construct(){
                 parent::__construct();
                 echo "Test_Controller</br>";
         }
 }
 
 
 
复制代码




application/controller/welcome.php
PHP复制代码
 
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Welcome extends Test_Controller {
 
        /**
         * Index Page for this controller.
         *
         * Maps to the following URL
         *                 http://example.com/index.php/welcome
         *        - or -  
         *                 http://example.com/index.php/welcome/index
         *        - or -
         * Since this controller is set as the default controller in
         * config/routes.php, it's displayed at http://example.com/
         *
         * So any other public methods not prefixed with an underscore will
         * map to /index.php/welcome/<method_name>
         * @see http://codeigniter.com/user_guide/general/urls.html
         */

        public function index()
        {
                echo "welcome";
        }
}
 
 
复制代码




输出结果:localhost/index.php
Console_Controller
Test_Controller
welcome


这不是实现了多层的继承?

 楼主| 发表于 2014-8-19 11:43:00 | 显示全部楼层
本帖最后由 似月光 于 2014-8-19 11:46 编辑
smallerpig 发表于 2014-8-15 17:29
哈哈~看没人回答我来试试
CI的加载控制器的方法是使用文件名来加载,所以文件名必须是"MY_Controller"(可 ...

这个倒是从技术上解决了多层的问题,但是我没讲,我想要干什么,我想要 这样                                                                                                            
PHP复制代码
 
CI_Controller->My_Controller->Front_Controller->很多个模块控制器
CI_Controller->My_Controlle->Admin_Controller->很多个模块控制器
 
复制代码
                                             
这样的4层结构怎么实现?



发表于 2014-8-15 17:29:54 | 显示全部楼层
似月光 发表于 2014-8-15 16:37
我问的问题 一般 没人回答

哈哈~看没人回答我来试试
CI的加载控制器的方法是使用文件名来加载,所以文件名必须是"MY_Controller"(可以通过配置文件修改)。但是里面的内容是不限制的。根据这点,你可以在MY_Controller.php里面定义多个类,多个类之间你想怎么搞就怎么搞。
PHP复制代码
 
 class Console_Controller extends CI_Controller{
        function __construct(){
                parent::__construct();
        }
 }
 
 
class Extends_Controller extends Console_Conctroller{
       function __construct(){
              parent::__construct();
       }
}
 
复制代码


使用的方法你当然会知道是是吧!!


 楼主| 发表于 2014-8-15 16:37:47 | 显示全部楼层
我问的问题 一般 没人回答
发表于 2014-8-16 14:43:52 | 显示全部楼层
可以,例如你想创建一个公共控制器或者模型,只需要在公共文件夹创建好,继承自CI_Controller或CI_Model,前提是你要修改加载文件的路径到你的公共文件夹
 楼主| 发表于 2014-8-19 11:47:03 | 显示全部楼层
小云 发表于 2014-8-16 14:43
可以,例如你想创建一个公共控制器或者模型,只需要在公共文件夹创建好,继承自CI_Controller或CI_Model, ...

你说的注意到分几层了吗?太模糊了,听不明白
发表于 2014-8-19 13:38:56 | 显示全部楼层
楼主说对了,继承只能有三层。
 楼主| 发表于 2014-8-19 15:05:53 | 显示全部楼层
Hex 发表于 2014-8-19 13:38
楼主说对了,继承只能有三层。

这样的设计不灵活,不强大啊,比如我想 这样子
CI_Controller->My_Controller->Front_Controller->很多个模块控制器
CI_Controller->My_Controlle->Admin_Controller->很多个模块控制器
分4层,MY_Controller是项目的顶层,Front_Controller是前台控制器的顶层,Admin_Controller是后台控制器的顶层,这样是不是用CI真的没法实现?
发表于 2014-8-19 15:38:41 | 显示全部楼层
似月光 发表于 2014-8-19 15:05
这样的设计不灵活,不强大啊,比如我想 这样子
CI_Controller->My_Controller[/ ...

你这种的完全没有必要啊,Front_Controller和Admin_Controller直接放顶层就好了,至于网址上可以通过修改routes达到你的需要啊。就算My_Controller有多个也无所谓,有限个的话直接多配置几组routes,无限个的用url类直接就可以读了
发表于 2014-8-19 15:42:23 | 显示全部楼层
本帖最后由 popcorner 于 2014-8-19 15:47 编辑
Hex 发表于 2014-8-19 13:38
楼主说对了,继承只能有三层。

反馈一个问题,论坛这边貌似有个bug,之前用qq账号注册登录本站不需要输入密码,但未登录久了一旦被锁定,qq登录就自动失效,想解锁就必须靠密码登录,之前qq注册的用户就再也回不来了。

本版积分规则