具有动态模块路径的Codeigniter HMVC + Rest_Controller

时间:2014-06-17 08:39:32

标签: php codeigniter hmvc codeigniter-hmvc

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

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

我想让这个路径动态化,或者为模块库文件夹中的每个模块自动加载库,在模块/ config / autoload.php中添加库名称对我来说不起作用,因为我认为原因是应用程序的代码流,首先应用程序流进入控制器,它到达我的类扩展REST_Controller并给出错误,无法加载REST_Controller类

注意:如果我将Rest_Controller.php和Format.php放在application / libraries /文件夹中,一切正常,但我希望这是模块化的,并使模块更加安静

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

我的文件夹结构如下

  

应用
   - - 模块
   - - - - modulename
   - - - - - - 控制器
   - - - - - - 图书馆
   - - - - - - config
   - - - - - - 模型
   - - - - - - 观点

我的Rest_Controller类在application / modules / module_name / libraries / Rest_Controller.php中

abstract class REST_Controller extends MX_Controller

我的Controller类在application / modules / module_name / controllers / User.php

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

这很好但是如果我从顶部删除了require行,它就不起作用,即使我将库名添加到/modulename/config/autoload.php中的autoload.php

它没有用  我的autoload.php /application/modules/modulename/config/autoload.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();
我的application / config / autoload.php中的

和autoload.php为空,表示没有提到自动加载

1 个答案:

答案 0 :(得分:0)

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

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

然后使用

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

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

如果有效,那么首先评论该行。

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

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

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

这肯定会起作用,因为我没有尝试过 - 如果它看起来你没有错误地修改你的路线或者一直在其他地方播放文件(可能在自定义控制器中过度使用了什么?)