似月光 发表于 2014-8-15 11:22:30

CI的控制器 是只能有三层吗?

CI的控制器 是只能有三层吗?CI_Controller->My_Controller->Module_Controller
能不能 多几层 更灵活?

smallerpig 发表于 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
// 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                              |
// |                                                                      |
// +----------------------------------------------------------------------+

/**
* @version1.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 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"(可 ...
这个倒是从技术上解决了多层的问题,但是我没讲,我想要干什么,我想要 这样                                                                                                            
CI_Controller->My_Controller->Front_Controller->很多个模块控制器
CI_Controller->My_Controlle->Admin_Controller->很多个模块控制器
                                             
这样的4层结构怎么实现?



smallerpig 发表于 2014-8-15 17:29:54

似月光 发表于 2014-8-15 16:37
我问的问题 一般 没人回答

哈哈~看没人回答我来试试
CI的加载控制器的方法是使用文件名来加载,所以文件名必须是"MY_Controller"(可以通过配置文件修改)。但是里面的内容是不限制的。根据这点,你可以在MY_Controller.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, ...

你说的注意到分几层了吗?太模糊了,听不明白

Hex 发表于 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真的没法实现?

popcorner 发表于 2014-8-19 15:38:41

似月光 发表于 2014-8-19 15:05
这样的设计不灵活,不强大啊,比如我想 这样子
CI_Controller->My_Controller[/ ...

你这种的完全没有必要啊,Front_Controller和Admin_Controller直接放顶层就好了,至于网址上可以通过修改routes达到你的需要啊。就算My_Controller有多个也无所谓,有限个的话直接多配置几组routes,无限个的用url类直接就可以读了

popcorner 发表于 2014-8-19 15:42:23

本帖最后由 popcorner 于 2014-8-19 15:47 编辑

Hex 发表于 2014-8-19 13:38
楼主说对了,继承只能有三层。
反馈一个问题,论坛这边貌似有个bug,之前用qq账号注册登录本站不需要输入密码,但未登录久了一旦被锁定,qq登录就自动失效,想解锁就必须靠密码登录,之前qq注册的用户就再也回不来了。
页: [1] 2
查看完整版本: CI的控制器 是只能有三层吗?