【发布时间】:2012-05-21 02:26:51
【问题描述】:
问题:
如何扩展 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 中。我想将它扩展到Courses 和Conferences,这将为这些各自的控制器提供特定的功能。我想将这些控制器存储在同一个模块文件夹中(即/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。我已尝试将该文件移动到上述路径,但随后我被要求提供 Courses 扩展自的 Events 控制器类的位置。
一个可能的解决方案:
一种可能的解决方案是将每个控制器包含在单个控制器文件中。但是,我不希望这样做,因为我喜欢将每个类存储在它自己的单独文件中,并尽可能与它的扩展类进行分组。我正在寻找一个更优雅且完全正确的解决方案。即使我尝试对单个文件进行这种技术,它也需要包含在/applications/modules/courses/controllers/courses.php 中才能被访问。这让我在稍后尝试路由到 conferences 控制器时不走运。
【问题讨论】:
-
您标题中的问题与帖子正文中的问题不太匹配。您的问题是扩展 PHP 类(控制器)还是路由?带有
$route['courses']的 routes.php 文件在您的模块目录或 app/config 中的什么位置?你的文件结构是什么样的?很难想象你的问题,我不确定这个“事件”类与任何东西有什么关系。你是什么意思“这让我失去了会议控制器的运气。”? -
@WesleyMurch 感谢您的意见。我更新了标题和问题,以更好地解释我遇到的问题。
标签: php model-view-controller codeigniter routing hmvc