如何在Codeigniter项目中获取所有控制器的数组?

时间:2010-05-09 11:32:57

标签: php codeigniter controller

我想获得Codeiginiter项目中所有控制器的列表,这样我就可以轻松遍历每个控制器并添加已定义的路径。我似乎无法找到一种能让我得到我所追求的方法吗?

以下是来自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

要解释一下我正在努力实现的目标......我有一个Pages控制器,其中包含about,contact-us,privacy等页面。这些页面都可以通过/ about,/ contact-us访问和/隐私。所以基本上,应该可以访问Pages控制器中的任何操作/方法,而无需指定/ pages /< action>。

不确定我是否以正确的方式解决这个问题?

1 个答案:

答案 0 :(得分:7)

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

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

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

Buuuuuut这可能不会成为最灵活的方法。

还有其他一些方法可以做到这一点。一种是创建一个MY_Router并插入

$this->set_class('pages'); 
$this->set_method($segments[0]);

之前/而不是show_404();

这将发送/联系到/ pages / contact,但前提是没有控制器,方法,路由首先映射到。

OOOOOOORRRRRR使用Modular Separation并将以下内容添加到您的主要routes.php

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