更改Codeigniter的默认控制器目录

时间:2017-09-12 20:46:07

标签: php codeigniter

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

/application/controllers
/application/buckets

我是一个偏执狂的人,我想分开两种类型的控制器。

在存储桶文件夹中,结构应用是这样的:

/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;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您可以使用带有Codeigniter的Hierarchical MVC(HMVC)来实现此目的。

供参考,请参阅Modular Extensions - HMVC

答案 1 :(得分:0)

您可能希望查看父子控制器...一个扩展另一个。更清楚的是,您可以制作所需数量的控制器。

我同意@Brian Gottier:“改变他们的位置有什么作用?” 如果您手中有核心功能,则可以执行任何操作。 您可以使用钩子( CodeIgniter的钩子功能提供了一种方法,可以在不破坏核心文件的情况下利用和修改框架的内部工作。当CodeIgniter运行时,它遵循特定的执行过程,如应用程序流程页面所示。

中创建“Base”/“Admin”/“Public”/“XYZ”控制器

application / core / MY_Controller.php

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

MY_Controller是一个基本的核心库扩展。每当您使用MY_前缀创建一个类时,CodeIgniter Loader类将在加载核心库后加载它。

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

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

我希望这有帮助。