编码器HMVC + Rest_Controller与动态模块路径


Codeigniter HMVC + Rest_Controller with Dynamic Module Path

我正在努力创建一个在编码器中具有HMVC结构的应用程序,我也需要API为中心的应用程序,所以我使用https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc为HMVC和Phil Sturgeon的Rest_Controller,现在一切都很好,但问题是对于模块中的每个控制器,我必须添加静态路径

require APPPATH.'modules/modulename/libraries/REST_Controller.php'; 

我想使此路径动态,或自动加载库在模块的库文件夹中的每个模块,在模块/config/autolload .php中添加库名不适合我,因为我认为原因是应用程序的代码流,首先应用程序流到控制器,它得到我的类扩展REST_Controller并给出错误,无法加载REST_Controller类

注意:如果我把Rest_Controller.php和Format.php在application/libraries/文件夹中,一切工作正常,但我希望这是模块化的,并使模块restful

如何从模块/库中加载库如何使其适当模块化,以便在模块中应该有一个完整的codeigniter实例,它应该自由工作,包括从主应用程序加载的文件。

文件夹结构如下


应用程序- - modules
- - - - modulename
- - - - - -控制器
- - - - - - libraries
- - - - - - config
- - - - - - models
- - - - - - views

My Rest_Controller Class in application/modules/module_name/libraries/Rest_Controller.php

abstract class REST_Controller extends MX_Controller

My Controller Class in application/modules/module_name/controllers/User.php

require APPPATH.'modules/modulename/libraries/REST_Controller.php';
class User extends REST_Controller
{

这工作得很好,但如果我从顶部删除的要求行,它不工作,即使我添加库名到autolload .php在/modulename/config/autolload .php

它不起作用/application/modules/modulename/config/autolload .php

<?phpif ( ! defined('BASEPATH')) exit('No direct script access allowed');
$autoload['packages'] = array();
$autoload['libraries'] = array('database', 'session','modulename/REST_Controller');
$autoload['helper'] = array('url', 'file');
$autoload['config'] = array();
$autoload['language'] = array();
$autoload['model'] = array();

和autolload .php在我的应用/config/autolload .php是空的,意味着没有提到的自动加载

首先,它不是很清楚,但你的结构应该是这样的:

application
- - modules
- - - - modulename
- - - - - - controller
- - - - - - - modulename.php
- - - - - - libraries
- - - - - - - Rest_Conctroller.php
- - - - - - config
- - - - - - - autoload.php
- - - - - - models
- - - - - - views

然后使用

$this->load->library('rest_controller');

在您的modulename.php控制器中首先检查它是否工作,并且您已经正确定义了所有路径。

如果可以,那么首先注释掉这一行。

然后在modulename/config文件夹中的autoload.php文件中设置:

$autoload['libraries'] = array('rest_controller');

然后再试一次-注意在类名之前没有任何内容。

这肯定会起作用,因为我已经尝试过了-如果它没有看起来你要么修改了你的路由不正确,要么一直在其他地方玩文件(也许在自定义控制器中覆盖的东西?)