使用Wiredesignz HMVC路由的CodeIgniter

3
我正在使用HMVC,创建了一个名为user的模块。在modules/user/config目录下,我有一个routes.php文件,其格式与application/config/routes.php相同。 在application/config/routes.php中,我有以下路由: $route['login'] = 'user/login'; 这很好用,但是当我将它移动到application/modules/user/config/routes.php时,它就无法工作了。我得到了404错误。 根据HMVC文档(https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc),您必须按照以下方式创建路由: $route['module_name'] = 'controller_name'; 这意味着我将不得不这样做: $route['user'] = 'user'; 这会导致404错误,即使我没有得到404错误,这也不完全符合我的想法。我仍然希望我的路由工作为/login转到user/login。 对此有任何想法都将不胜感激! 谢谢!

这里有没有任何想法的人? - Kobus Myburgh
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3

我和你一样遇到了完全相同的问题,不幸的是 Wiredesignz 创建扩展时要求路径从模块名称本身开始,如果您将路由文件放在模块内部,那么这是它查找路由文件的唯一方式。这种情况下,已经知道模块名称,因此您只需要指定您想要路由到的控制器和方法。因此,在您的模块配置目录中的routes.php文件中,如果您写入以下内容:

$route['yourmodule/some-route'] = "yourcontroller/yourmethod";

换句话说:

$route['user'] = 'user/login';
我相信那样可以工作。然而我仍想要更多。我希望能够使用可能具有模块名称的路由,也可能不具有。因此,我不得不扩展模块以实现这一点,如果需要,您可以在此找到我所做的工作:https://github.com/brianwozeniak/codeigniter-modular-extensions-hmvc 这将允许您使用所需的路由,例如:
$route['login'] = 'user/login';
即使将routes.php放置在模块的配置目录中,也是可以的。

谢谢@Bigwebmaster。我会研究一下你的HMVC分支,看看能否在我的网站上使用。这将非常棒。一旦我有机会检查它,如果需要,我会点赞/接受答案。感谢您的回答! - Kobus Myburgh
太棒了,谢谢@Bigwebmaster,它对我也百分之百有效。祝你有美好的一天! - Kobus Myburgh
嗨,@Bigwebmaster,它运行良好,但有一些事情您可能需要注意:如果您想调用未链接到特定路由的控制器/函数,则会出现404错误。很有可能您在某个阶段需要调用未绑定到路由的函数。 - Kobus Myburgh
默认情况下,我设置路由无效,除非指定。在文档中我也提到了这一点,但基本上如果你进入routes.php并将:protected static $remove_default_routes = TRUE;更改为FALSE,那么应该允许默认路由在任何地方工作。 - Brian
最近我还做了一些工作,使得控制器/方法可以通过其他模块在内部调用,即使路由没有明确指定。不过,我在那方面没有进行太多测试,所以有可能它并没有正常工作。 - Brian
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,