我想获得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>。
不确定我是否以正确的方式解决这个问题?
答案 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';