如何将HMVC的所有模块路由到单个控制器CI

时间:2012-11-05 19:53:19

标签: codeigniter controller routes hmvc

我使用HMVC和CI最后版本而我想将HMVC的所有模块路由到控制器CI

如果我使用

$route[‘admin/(:any)’] = “admin/”;
$route[’(:any)’] = “index/index/$1”;
$route[’(:any)/(:any)’] = “index/index/$1/$2”;
$route[’(:any)/(:any)/(:any)’] = “index/index/$1/$2/$3”;

不是解决方案,因为网址可以包含多个细分

我想路由控制器,方法和所有参数,如下所示:

$route[’(:any)/(:any)/ *all parameters *’] = “index/index/$1/$2/ *array($parameters)*”;

或者如何停止HMVC的路线,我不需要HMVC的路线。

请帮助。

谢谢,Jhon。

1 个答案:

答案 0 :(得分:0)

您不需要路由,codeigniter已经这样做了。

从全新的CI安装中,使用welcome控制器:

public function index()
{

    $args = $this->uri->uri_to_assoc();

    echo "<pre>";

    print_r($args);

    echo "</pre>";

    // $this->load->view('welcome_message');
}

访问[http://localhost/codeigniter2.1.2/index.php/welcome/index/param1/param1_value/param2/param2_value/param3/etc]

得出这个:

Array
(
[param1] => param1_value
[param2] => param2_value
[param3] => etc
)

所以你有你的控制器[welcome],你的函数[index]以及之后的所有参数;不需要乱用路由。


您无需考虑可能路由的每个可能参数。

您可以使用以下路线:

$route[‘admin/(:any)’] = “admin/”;
$route[’(:any)/(:any)/(:any)’] = “index/index/$1/$2/$3”;

然后,除admin/*之外的每个网址都将路由到index/index。从那时起,您可以获取上面发布的参数或$this->uri->segment(n); n所需的细分参数(因此,$this->uri->segment(3)将从上面的路线返回$1 )。