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

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

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

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

我的文件夹结构如下

应用程序
- - 模块
- - - - 模块名 -
- - - - - 控制器
- - - - - 库
- - - - - - 配置
- - - - - 模型
- - - - - - 视图

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

abstract class REST_Controller extends MX_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 是空的,意味着没有提到自动加载

4

1 回答 1

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

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

这肯定会像我尝试过的那样有效 - 如果没有,您似乎要么错误地修改了路由,要么一直在其他地方玩文件(可能覆盖了自定义控制器中的某些内容?)

于 2014-06-21T12:30:13.633 回答