对于带有 Codeigniter 的模块化结构,模块化扩展 - HMVC是首选解决方案:
https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc
对于您的设置,您可以将其添加到您的config.php
:
$config['modules_locations'] = array(
// absolute path relative path
APPPATH.'3rd_party/application/' => '../../3rd_party/application/',
);
- /project_root/
- /系统
- /3rd_party/
- /dists/
- /应用/
- tank_auth
- 我的模块
- some_other_third_party_code
- /应用/
- /地点/
“相对路径”相对于应用程序根目录中的任何子目录,例如models
, controllers
,helpers
等。例如,在 CI 中,如果您使用以下命令,您可以从“视图”目录加载“模型”:
$this->load->model('../views/some_model');
...这不是你通常会做的事情——但这就是 HMVC 加载程序的工作方式。HVMC 可用于加载 CI 通常可以加载的任何内容,但可以从“模块”目录加载。您可以拥有任意数量的不同模块或模块路径。
模块可以(但不是必须)加载控制器并像它们自己的迷你应用程序一样工作。您还可以跨模块或从默认应用程序根加载依赖项。您仍然可以在模块旁边使用默认应用程序目录。要指定要从模块路径加载特定资产,只需在路径中包含模块名称:
// Loads the "tank_auth" library (works from the tank_auth module)
$this->load->library('tank_auth');
// Loads the "tank_auth" library (works from anywhere in your application)
$this->load->library('tank_auth/tank_auth');
这也适用于模型、助手等。
要访问其中的控制器,tank_auth/controllers/login
您将使用 URL http://example.com/tank_auth/login
。您还可以使用该modules::run()
方法在另一个控制器中运行控制器,这可以让您在自己的逻辑中“包装”模块的控制器方法,而无需触及它们:
class my_login extends MX_Controller {
function index() {
modules::run('tank_auth/login');
}
}
它有很好的记录,并且已经存在多年。我几乎在我做过的每个 Codeigniter 项目中都使用了 HMVC,我强烈推荐它。