Php 更改Codeigniter的默认控制器目录
我想有两个文件夹保存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 也许可以扩展路由器类
/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,我认为你必须为每个控制器路由每个方法。我发现:如果你真的对控制器的位置很怀疑,那么改变它们的位置会做什么?它什么也不做。如果有人可以访问你的文件系统,他们会找到你的控制器,不管他们在哪里。您可能应该考虑服务器安全,因为这是您的保护的来源。可能。