【问题标题】:codeigniter hmvc routes not working properlycodeigniter hmvc 路由无法正常工作
【发布时间】:2013-01-07 17:17:32
【问题描述】:

我通过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,它就可以正常工作。

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

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

【问题讨论】:

    标签: codeigniter hmvc


    【解决方案1】:

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

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

    【讨论】:

    • 干得好,使用它还没有任何错误!谢谢。 =)
    【解决方案2】:

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

    您必须使用主应用程序的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";
    

    【讨论】:

    • 谢谢你的回答,所以从这个角度来看,实际上和基本上是没用的,对吧?
    • 不确定你的意思,但我会发布我的路由示例,因为我正在做类似的事情。
    • 我的意思是,如果您想将这些路由用作普通 CI 路由,不“hacky”就没有机会?仅当您在该段中使用该模块时:) 我希望清除,并感谢您分享您的代码,我可以学到一些有用的东西
    • 是的,我想你明白了,除非模块被加载,否则模块的路由不会被加载。
    • 我自己制作了这部分路由,并且只有在模块中控制器被命名为“admin”(如果我将其命名为 admin_category 或类别相同的问题)时路由在模块配置中不起作用: (
    【解决方案3】:

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

    MY_Router.php复制到application/core/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 2016-11-26
      • 2014-12-05
      • 2018-01-17
      • 2017-10-15
      相关资源
      最近更新 更多