<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class ControllerList {
private $CI;
/**
* 包含控制器名称和方法
*/
private $aControllers;
// Construct
function __construct() {
$this->CI = get_instance();
$this->setControllers();
}
/**
* 返回所有控制器及其方法
* @return array
*/
public function getControllers() {
return $this->aControllers;
}
/**
* 设置包含控制器名称和方法的数组
*/
public function setControllerMethods($p_sControllerName, $p_aControllerMethods) {
$this->aControllers[$p_sControllerName] = $p_aControllerMethods;
}
/**
* 设置控制器和方法。
*/
private function setControllers() {
// 遍历控制器目录
foreach(glob(APPPATH . 'controllers/*') as $controller) {
// 如果循环中的值是通过该目录的目录循环
if(is_dir($controller)) {
// 获取目录名称
$dirname = basename($controller, EXT);
// 遍历子目录
foreach(glob(APPPATH . 'controllers/'.$dirname.'/*') as $subdircontroller) {
// 获取子目录的名称
$subdircontrollername = basename($subdircontroller, EXT);
// 如果尚未加载控制器文件,请将该文件加载到内存中
if(!class_exists($subdircontrollername)) {
$this->CI->load->file($subdircontroller);
}
//使用其方法将controllername添加到数组
$aMethods = get_class_methods($subdircontrollername);
$aUserMethods = array();
foreach($aMethods as $method) {
if($method != '__construct' && $method != 'get_instance' && $method != $subdircontrollername) {
$aUserMethods[] = $method;
}
}
$this->setControllerMethods($subdircontrollername, $aUserMethods);
}
}
else if(pathinfo($controller, PATHINFO_EXTENSION) == "php"){
$controllername = basename($controller, EXT);
// 如果尚未加载控制器文件,请将该文件加载到内存中
if(!class_exists($controllername)) {
$this->CI->load->file($controller);
}
$aMethods = get_class_methods($controllername);
$aUserMethods = array();
if(is_array($aMethods)){
foreach($aMethods as $method) {
if($method != '__construct' && $method != 'get_instance' && $method != $controllername) {
$aUserMethods[] = $method;
}
}
}
$this->setControllerMethods($controllername, $aUserMethods);
}
}
}
}