问题:
如何扩展 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
. 我已尝试将该文件移动到上述路径,但随后我被要求提供扩展自的Events
控制器类的位置。Courses
一个可能的解决方案:
一种可能的解决方案可能是将每个控制器包含在单个控制器文件中。但是,我不希望这样做,因为我喜欢将每个类存储在它自己的单独文件中,并尽可能与它的扩展类进行分组。我正在寻找一个更优雅且完全正确的解决方案。即使我要尝试使用单个文件的这种技术,它也需要包含在其中/applications/modules/courses/controllers/courses.php
才能被访问。这让我在稍后尝试路由到conferences
控制器时不走运。