ash*_*ash 2 php controller codeigniter
我想获得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';
Run Code Online (Sandbox Code Playgroud)
更新#1
为了解释我正在努力实现的目标......我有一个Pages控制器,其中包含about,contact-us,privacy等页面.这些页面都应该可以通过/ about,/ contact-us和/ privacy访问.所以基本上,可以访问Pages控制器中的任何操作/方法,而无需指定/ pages/<action>.
不知道我是否正确地走这条路?
那么直接回答编码问题,你可以这样做:
foreach(glob(APPPATH . 'controllers/*' . EXT) as $controller)
{
$controller = basename($controller, EXT);
$route[$controller] = $controller . '/index';
$route[$controller . '/(.+)'] = $controller . '/$1';
}
Run Code Online (Sandbox Code Playgroud)
Buuuuuut这可能不会成为最灵活的方法.
还有其他一些方法可以做到这一点.一个是创建一个MY_Router并插入
$this->set_class('pages');
$this->set_method($segments[0]);
Run Code Online (Sandbox Code Playgroud)
之前/而不是show_404();
这将发送/联系到/ pages/contact,但前提是没有控制器,方法,路由首先映射到.
OOOOOOORRRRRR使用模块化分离,并在主要routes.php中添加以下内容
$routes['404'] = 'pages';
Run Code Online (Sandbox Code Playgroud)