2010-05-09 88 views
2

我想获得Codeiginiter项目中所有控制器的列表,以便我可以轻松地遍历每个控制器并添加定义的路由。我似乎无法找到一种能够给我以后的方法吗?如何获取Codeigniter项目中所有控制器的数组?

下面是来自routes.php文件文件的代码段,我想访问数组: -

// I'd like $controllers to be dynamically populated by a method 
// 
$controllers = array('pages', 'users'); 

// Loop through each controller and add controller/action routes 
// 
foreach ($controllers as $controller) { 
    $route[$controller] = $controller . '/index'; 
    $route[$controller . '/(.+)'] = $controller . '/$1'; 
} 

// Any URL that doesn't have a/in it should be tried as an action against 
// the pages controller 
// 
$route['([^\/]+)$'] = 'pages/$1'; 

更新#1

为了解释多一点我是什么试图实现..我有一个页面控制器,其中包含页面,如关于,联系我们,隐私等。这些页面应该都可以通过/ about,/ contact-us和/ privacy来访问。所以基本上,Pages控制器中的任何动作/方法都可以访问,而无需指定/ pages/<动作>。

不知道我是否正在以正确的方式进行讨论?

+0

@ash,也许你可以更好地做你与的.htaccess尝试投放的内容?为什么/你想试试的简短解释也会很酷,谢谢! – k00k 2010-05-09 13:16:57

回答

7

那么直接回答编码问题,你可以这样做:

foreach(glob(APPPATH . 'controllers/*' . EXT) as $controller) 
{ 
    $controller = basename($controller, EXT); 

    $route[$controller] = $controller . '/index'; 
    $route[$controller . '/(.+)'] = $controller . '/$1'; 
} 

Buuuuuut这可能不工作了是最灵活的方法进一步向下行。

还有其他几种方法可以做到这一点。一个是创建一个MY_Router并插入到/之前/而不是show_404();然后插入一个MY_Router并插入。

这将发送/联系到/网页/联系人,但只有当没有控制器,方法,路线先映射到。

OOOOOOORRRRRR使用Modular Separation,并添加以下到您的主routes.php文件

$routes['404'] = 'pages'; 
+0

非常感谢你:)两个很棒的选择! – ash 2010-05-10 12:45:19

+2

3个不错的选择。 ;-) – 2010-05-10 15:49:50

+0

非常有帮助!谢谢 :) – 2010-05-17 05:34:03

相关问题