我通过wiredesignz安装了HMVC,但application/modules/xxx/config/routes.php
的路由根本没有被识别。
这是一个例子:
在application/modules/pages/config/routes.php
我有:
$route['pages/admin/(:any)'] = 'admin/$1';
$route['pages/admin'] = 'admin';
如果我输入了网址,domain.com/admin/pages/create
它无效,则会显示未找到CI 404页面。
如果我将路线移至application/config/routes.php
,它就可以正常工作。
如何在不将所有管理路由放在主routes.php
?
我在网上搜索了4个多小时,但没有找到关于这个问题的答案。我已经检查过模块中的routes.php
是否正在加载并且工作正常,但我放入的任何路由都不起作用。
答案 0 :(得分:6)
我找到了一种方法,让模块的路由工作正常,我不知道是否是理想的解决方案,但到目前为止工作正常:
打开你的应用程序/ config / routes.php并在$ route ['404_override'] =''下面;添加以下代码:
$modules_path = APPPATH.'modules/';
$modules = scandir($modules_path);
foreach($modules as $module)
{
if($module === '.' || $module === '..') continue;
if(is_dir($modules_path) . '/' . $module)
{
$routes_path = $modules_path . $module . '/config/routes.php';
if(file_exists($routes_path))
{
require($routes_path);
}
else
{
continue;
}
}
}
即使您的模块文件夹中缺少config文件夹或routes.php,以下解决方案也能正常工作
答案 1 :(得分:2)
这就是:模块的routes.php
仅在“调用”该模块时才被加载,否则CI必须从所有加载所有路由配置模块,以处理每个请求(不会发生)。
您必须使用主应用程序的routes.php
才能使其正常运行。您没有在URL中使用pages
段,因此永远不会加载该模块的路由。
我知道这是你想要避免的,但不幸的是,除非你想得到“hacky”,否则它是不可能的。
以下是我用于将admin/module
的请求映射到module/admin
的路由,也许您可以使用它:
// application/config/routes.php
$route['admin'] = "dashboard/admin"; // dashboard is a module
$route['admin/([a-zA-Z_-]+)/(:any)'] = "$1/admin/$2";
$route['admin/([a-zA-Z_-]+)'] = "$1/admin/index";
$route['(:any)/admin'] = "admin/$1";
答案 2 :(得分:0)
您只需要https://gist.github.com/Kristories/5227732。
将MY_Router.php
复制到application/core/
答案 3 :(得分:0)
现在有点晚了,但对于想知道如何将codeigniter集成到hmvc的新访问者来说,你可以查看这个教程如何做到这一点。我希望它可以帮助你们.. http://developers.ph/codeigniter/hmvc-pattern-codeigniter-php-framework/