在模块内部路由Codeigniter hmvc

时间:2016-02-03 15:33:52

标签: php codeigniter

我希望每个模块都有一个'全局链接',如下所示:

application / config / routes.php

$route['search'] = 'searchPage';

如果用户在url中输入搜索需要转到模块searchPage,那么模块内部的路径就会出现。或者那就是我的计划,我想要在该模块内部进行默认路由。

modules / searchPage / config / routes.php

$route['searchPage'] = 'Welcome/showMessage';

使用showMessage函数转到Welcome控制器。

-modules
--searchPage
---config
----routes.php
---controllers
---views
---models

在我的欢迎控制器中:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends MX_Controller {

    public function showMessage()
    {
        $this->load->view('test');
    }
}
?>

版本:Wiredesignz 5.5和codeigniter 3.0.3

但这不起作用。有人可以解释为什么这不起作用吗?

我找到了解决方案:

我已将此代码放在application / config / routes.php

$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;
        }
    }
}

在modules / searchPage / config / routes.php里面

$route['searchPage'] = 'searchPage/Welcome/showMessage';

2 个答案:

答案 0 :(得分:0)

你的结构表现不佳

-modules
--searchPage
---config
----routes.php
---controllers
---views
---models

它看起来应该是这样的

    -config
    --routes.php
    -modules
    --searchPage
    ---controllers
    ---views
    ---models

你只能有一个配置文件夹,必须在modules文件夹之外,与配置的所有php文件相同

答案 1 :(得分:0)

如果您的模块名为searchPage

$route['searchPage'] = 'searchPage/welcome/showMessage';
$route['some_name'] = 'module/controller/function';

目录示例

modules >

modules > searchPage >

modules > searchPage > controllers >

modules > searchPage > controllers > Welcome.php

如果您没有使用htaccess删除index.php,则可能需要在您的网址中包含index.php。

使用您的模块文件夹中的配置和路由,最好使用主application > config > routes.phpapplication > config > config.php

中的配置和路由