首页 文章

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

提问于
浏览
1

我正在创建一个在codeigniter中具有HMVC结构的应用程序,我也需要API中心应用程序,所以我使用https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc用于HMVC和Phil Sturgeon的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实例,它应该可以自由工作,包括从主应用程序加载的文件 .

My folder structure is as follows

application - - modules - - - - modulename - - - - - - controller - - - - - - libraries - - - - - - config - - - - - - models - - - - - - views

我在应用程序/ modules / module_name / libraries / Rest_Controller.php中的Rest_Controller类

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

    首先 - 目前尚不清楚,但您的结构应如下所示:

    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');
    

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

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

相关问题