1

问题:

如何扩展 HMVC 模块的控制器,然后在 Codeigniter 的 URI 路由器中调用该扩展类?

细节:

假设以下与 HMVC 相关的典型 Codeigniter 文件结构:

/
/application
/application/modules
/application/modules/module-name
/application/modules/module-name/controllers
/application/modules/module-name/controllers/controller-name.php
/application/modules/module-name/models
/application/modules/module-name/models/model-name.php
/application/modules/module-name/views
/application/modules/module-name/views/view-name.php
/application/config
/application/config/routes.php

我有一个类Events存储在/application/modules/events/controllers/events.php. 我想将它扩展到CoursesConferences为这些各自的控制器提供特定的功能。我想将这些控制器存储在同一个模块文件夹中(即/applications/modules/events/controllers/courses.php,等)我想将访问http://www.example.com/courses的用户路由到courses控制器,如下所示:

$route['courses'] = 'courses/getList';

我还想将访问http://www.example.com/conferences的用户路由到conferences控制器,如下所示:

$route['conferences'] = 'conferences/getList';

问题:

不幸的是,我似乎无法让它工作,因为课程不包含在它自己的模块中,因此路由器无法找到。看来路由器正在course以下文件路径中查找类文件:/applications/modules/courses/controllers/courses.php. 我已尝试将该文件移动到上述路径,但随后我被要求提供扩展自的Events控制器类的位置。Courses

一个可能的解决方案:

一种可能的解决方案可能是将每个控制器包含在单个控制器文件中。但是,我不希望这样做,因为我喜欢将每个类存储在它自己的单独文件中,并尽可能与它的扩展类进行分组。我正在寻找一个更优雅且完全正确的解决方案。即使我要尝试使用单个文件的这种技术,它也需要包含在其中/applications/modules/courses/controllers/courses.php才能被访问。这让我在稍后尝试路由到conferences控制器时不走运。

4

1 回答 1

1

似乎通过添加

require APPPATH."modules/events/controllers/events.php";

在我的扩展课程(coursesconferences)开始时,我将能够不理会Events模块。

不幸的是,我必须为coursesconferences控制器创建单独的模块。哦,好吧,我想它不可能是完美的。

于 2012-05-13T04:22:11.240 回答