带有 Wiredesignz HMVC 路由的 CodeIgniter

Posted

技术标签:

【中文标题】带有 Wiredesignz HMVC 路由的 CodeIgniter【英文标题】:CodeIgniter with Wiredesignz HMVC routing 【发布时间】:2013-03-16 10:47:41 【问题描述】:

我正在使用 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 时,我仍然希望保持路由正常工作。

任何想法将不胜感激!

谢谢!

【问题讨论】:

这里有人有什么想法吗? 【参考方案1】:

我遇到了和你一样的问题,不幸的是,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 分支,看看我是否可以让它在我的网站上运行。会很棒。一旦我有机会检查它,我会在需要时投票/接受。感谢您的回答! 太棒了,谢谢@Bigwebmaster,它对我来说也 100% 有效。祝你有美好的一天! 嗨,@Bigwebmaster 它运行良好,但您可能需要查看一些内容:如果您想调用未链接到特定路由的控制器/函数,它会为您提供 404错误。您可能需要在某个阶段调用未绑定到路由的函数。 默认情况下,除非指定,否则路由无效。在文档中我也提到了这一点,但基本上如果你进入 routes.php 并更改: protected static $remove_default_routes = TRUE;到 FALSE 应该允许默认路由在任何地方都可以工作。 我最近也做了,即使没有明确指定路由,也可以通过其他模块在内部调用控制器/方法,虽然,我没有在那里做太多测试,所以它可能无法正常工作。

以上是关于带有 Wiredesignz HMVC 路由的 CodeIgniter的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter HMVC object_to_array() 错误

Codeigniter 3 + HMVC 模块(cgi/fastcgi 与 apache 处理程序)

Laravel 5 HMVC 路由问题

HMVC集成在Codeigniter视图路径中。

什么是 HMVC 模式?

Codeigniter 模块化扩展 HMVC 不会加载视图