5

我通过wiredesignz 安装了HMVC,但application/modules/xxx/config/routes.php根本无法识别来自的路线。这是一个例子:

application/modules/pages/config/routes.php我有:

$route['pages/admin/(:any)'] = 'admin/$1';
$route['pages/admin'] = 'admin';

如果我键入 URL,domain.com/admin/pages/create它不起作用,则会出现 CI 404 Page not found。如果我将路线移动到application/config/routes.php它就可以了。

如何在不将所有管理路由放入 main 的情况下使其工作routes.php

我在网上搜索了 4 个多小时,但没有找到有关此问题的答案。我已经检查routes.php了模块是否正在加载并且工作正常,但是我放入的任何路由都不起作用。

4

3 回答 3

7

我找到了一种使模块中的路由正常工作的方法,我不知道是否是理想的解决方案,但到目前为止工作正常:

打开你的 application/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,以下解决方案也能正常工作

于 2013-01-14T14:05:04.313 回答
2

事情是这样的:该模块routes.php仅在“调用”该模块时才被加载,否则 CI 必须从所有模块加载所有路由配置才能处理每个请求(这不会发生)。

您必须使用您的主应用程序routes.php才能使其正常工作。您没有pages在 URL 中使用该段,因此该模块的路由永远不会被加载。

我知道这是您想要避免的,但不幸的是,除非您想变得“hacky”,否则这是不可能的。


这是我用来映射 to 请求的路由admin/modulemodule/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";
于 2013-01-07T17:26:25.560 回答
0

你只需要这个https://gist.github.com/Kristories/5227732

复制MY_Router.phpapplication/core/

于 2013-06-19T10:47:16.070 回答