我正在努力创建一个在编码器中具有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');
然后再试一次-注意在类名之前没有任何内容。
这肯定会起作用,因为我已经尝试过了-如果它没有看起来你要么修改了你的路由不正确,要么一直在其他地方玩文件(也许在自定义控制器中覆盖的东西?)