我有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
,则确实会杀死该脚本,
但是正在运行
来自其中一个控制器的 print_r($this->router)
未显示模块routes.php
中的任何路由。
这里发生了什么?
答案 0 :(得分:1)
据我所知,
HMVC只在每个模块中查找请求的控制器,具有不同的层次结构模型,但是从不读取使用routes.php的模块内的路由覆盖。
查看MX_Router::locate
它永远不会在任何模块中查找routes.php
。
此外,它不会覆盖在{config}文件夹中查找CI_Router::_set_routing
的{{1}}。
您必须覆盖routes.php
并在每个可用模块中阅读CI_Router::_set_routing
,以便模块路由覆盖工作。
答案 1 :(得分:0)
Broncha显示方式,我向您展示代码。 我使用此解决方案:
您必须在_set_routing()
中修改system/core/Router.php
或在MY_Router类(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);
我希望它会有所帮助...