3

我有 hmvc 设置并且工作正常,

我有一个画廊模块。

图库模块分为三个控制器,其结构如下:

/modules/gallery/
/modules/gallery/config/
/modules/gallery/helpers/
/modules/gallery/controllers/
/modules/gallery/controllers/gallery.php
/modules/gallery/controllers/galleries.php
/modules/gallery/controllers/images.php
/modules/gallery/models/
/modules/gallery/models/galleriesmodel.php
/modules/gallery/models/imagesmodel.php
/modules/gallery/views/dashboard.tpl
/modules/gallery/views/galleries/dashboard.tpl
/modules/gallery/views/images/dashboard.tpl

无论如何,我的images.php控制器中有一个名为list_items

所以我想将网址
http://example.com/gallery/images/list映射到
http://example.com/gallery/images/list_items

所以我想,甜蜜的,我会在/modules/gallery/config/routes.php里面添加一个带有路线的。

但似乎这些路线没有被包括在内。

包含来自的路线/application/config/routes.php,如果我die('loaded')在模块routes.php中放入 a 它确实会杀死脚本,

但是跑步

print_r($this->router)从其中一个控制器不显示来自模块的任何路由routes.php

这里发生了什么?

4

2 回答 2

1

据我所知,

HMVC 仅在每个模块内查找请求的控制器,具有不同的层次模型,但从不读取模块内使用 routes.php 的路由覆盖。

MX_Router::locate调查它永远不会routes.php在任何模块中寻找。

它也不会覆盖在配置文件夹CI_Router::_set_routing中查找的内容。routes.php

您必须覆盖CI_Router::_set_routing并读取config/router.php每个可用模块,以便您的模块路由覆盖工作。

于 2012-10-04T06:52:50.237 回答
0

Broncha 给你指路,我给你看代码。我使用这个解决方案:

您必须在 MY_Router 类 ( ) 中编辑_set_routing()system/core/Router.php扩展此方法(更好third_party/Router.php)。

现在它应该总是加载module/config/routes.php...... (大约在第 140 行)

// Load the routes.php file.
        if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/routes.php'))
        {
            include(APPPATH.'config/'.ENVIRONMENT.'/routes.php');
        }
        elseif (is_file(APPPATH.'config/routes.php'))
        {
            include(APPPATH.'config/routes.php');
        }

        // Include routes every modules
        $modules_locations = config_item('modules_locations') ? config_item('modules_locations') : FALSE;
        if(!$modules_locations)
        {
            $modules_locations = APPPATH . 'modules/';
            if(is_dir($modules_locations))
            {
                $modules_locations = array($modules_locations => '../modules/');
            }
            else
            {
                show_error('Modules directory not found');
            }
        }
        foreach ($modules_locations as $key => $value)
        {
            if ($handle = opendir($key))
            {
                while (false !== ($entry = readdir($handle)))
                {
                    if ($entry != "." && $entry != "..")
                    {
                        if(is_dir($key.$entry))
                        {
                            $rfile = Modules::find('routes'.EXT, $entry, 'config/');
                            if($rfile[0])
                            {
                                include($rfile[0].$rfile[1]);
                            }
                        }
                    }
                }
                closedir($handle);
            }
        } 

        $this->routes = ( ! isset($route) OR ! is_array($route)) ? array() : $route;
        unset($route);

我希望它会有所帮助...

于 2015-01-05T13:08:00.483 回答