Php 更改Codeigniter的默认控制器目录

Php 更改Codeigniter的默认控制器目录,php,codeigniter,Php,Codeigniter,我想有两个文件夹保存codeigniter的控制器: /application/controllers /application/buckets 我是一个偏执狂,我想把我的控制器分为两类 在bucket文件夹中,结构应用程序如下所示: /application/buckets/example/index.php /application/buckets/example2/index.php /application/buckets/example3/index.php 也许可以扩展路由器类

我想有两个文件夹保存codeigniter的控制器:

/application/controllers
/application/buckets
我是一个偏执狂,我想把我的控制器分为两类

在bucket文件夹中,结构应用程序如下所示:

/application/buckets/example/index.php
/application/buckets/example2/index.php
/application/buckets/example3/index.php
也许可以扩展路由器类

一个有效的例子:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/*
    Extended the core Router class to allow for sub-sub-folders in the controllers directory.
*/
class App_Router extends CI_Router {

    function __construct()
    {
        parent::__construct();
    }

    function _validate_request($segments)
    {
        if (count($segments) == 0)
        {
            return $segments;
        }

        if (file_exists(APPPATH.'buckets/'.$segments[0].'/index.php'))
        {


            $this->set_directory(APPPATH.'buckets/'.$segments[0]);
            $this->set_class(ucfirst($segments[0]));
            $this->set_method(isset($segments[1]) ? $segments[1] : 'index');

            return $segments;
        }
    }
}

您可以将分层MVC(HMVC)与Codeigniter一起使用来实现这一点


有关参考信息,请参见

您可能希望查看父子控制器…一个扩展另一个。更清楚地说,您可以制作任意数量的控制器

我同意@Brian Gottier的观点:“改变他们的位置能做什么?” 如果掌握了核心功能,您可以执行任何操作。 您可以使用钩子(CodeIgniter的钩子功能提供了一种方法,可以利用和修改框架的内部工作,而无需对核心文件进行黑客攻击。当CodeIgniter运行时,它遵循特定的执行过程,如应用程序流页面所示。

在中创建“基本”/“管理”/“公共”/“XYZ”控制器

application/core/MY_Controller.php

并将其余控制器保存在同一应用程序/控制器文件夹中

MY_控制器是一个基本的核心库扩展。每当您创建一个带有MY_uu前缀的类时,CodeIgniter加载程序类将在加载核心库后加载该类

我们在这里所做的就是创建一个基类,所有控制器和“控制器类型”都将继承该基类。我们在这里输入并分配给$this的任何内容都可以用于扩展此类的任何内容

基本控制器是一种非常简单的方法,可以为您提供全局数据、逻辑和共享代码,这些数据、逻辑和代码可以特定于站点的某个部分。他们可以做各种疯狂的事情,我会留给你去思考


我希望这对您有所帮助。

您可以在控制器中设置子文件夹。我看到的缺点是,如果你关心显示子文件夹的url,我认为你必须为每个控制器路由每个方法。我发现:如果你真的对控制器的位置很怀疑,那么改变它们的位置会做什么?它什么也不做。如果有人可以访问你的文件系统,他们会找到你的控制器,不管他们在哪里。您可能应该考虑服务器安全,因为这是您的保护的来源。可能。