Php 如何从HMVC Codeigniter获取所有类和方法的列表?
我的HMVC中有一些模块,是否可以在模块目录中列出所有类和方法并放入数组Php 如何从HMVC Codeigniter获取所有类和方法的列表?,php,arrays,codeigniter,hmvc,Php,Arrays,Codeigniter,Hmvc,我的HMVC中有一些模块,是否可以在模块目录中列出所有类和方法并放入数组 谢谢你,很抱歉我的英语不好试试这个。。创建一个名为Controllerslist的库并复制此代码 在这之后。。在控制器中加载此库 $this->load->library('Controllerslist'); $list = $this->controllerslist->getControllers(); print_r($list); 这对我很有用。小更新Utkarsh Tiwari 对于
谢谢你,很抱歉我的英语不好试试这个。。创建一个名为Controllerslist的库并复制此代码 在这之后。。在控制器中加载此库
$this->load->library('Controllerslist');
$list = $this->controllerslist->getControllers();
print_r($list);
这对我很有用。小更新Utkarsh Tiwari 对于HMVC结构,我们应该首先获得所有模块列表,然后是每个模块的所有控制器
class ControllerList {
// Codeigniter reference
private $CI;
// Array that will hold the controller names and methods
private $aControllers;
// Construct
function __construct() {
// Get Codeigniter instance
$this->CI = get_instance();
// Get all controllers
$this->setControllers();
}
/**
* Return all controllers and their methods
* return array
*/
public function getControllers() {
return $this->aControllers;
}
/**
* Set the array holding the controller name and methods
*/
public function setControllerMethods($p_sControllerName, $p_aControllerMethods) {
$this->aControllers[$p_sControllerName] = $p_aControllerMethods;
}
/**
* Search and set controller and methods.
*/
private function setControllers() {
foreach(glob(APPPATH . 'modules/*') as $modules_all) {
if(is_dir($modules_all)) {
$dirname = basename($modules_all);
foreach(glob(APPPATH . 'modules/'.$dirname.'/controllers/*') as $subdircontroller) {
$subdircontrollername = basename($subdircontroller, EXT);
if(!class_exists($subdircontrollername)) {
$this->CI->load->file($subdircontroller);
}
$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);
}
}
}
}
在此之后,您只需获取所有方法和控制器的列表
$this->load->library('controllerlist');
$list = $this->controllerlist->getControllers();
print_r($list);
这对我来说很有用。不,你不需要编写自己的爬虫程序……为什么我得到空结果,先生?ForEachGlobalAppPath。”modules/controllers/*'该APPPATH.“modules/controllers”是否正确您必须根据HMVC CodeIgniter中的文件夹进行修改请检查您的路径,因为它对我有效。。我的路径是APPPATH.modules/mysite/controllers/。这对我来说很有用。。我可以看看你的应用程序文件夹结构吗。。你的控制器在哪个文件夹里?先生,我已经创建了我自己的函数。。我认为这个库不能读取同一个类声明…好的,谢谢@ModusTollens,实际上我是Stackoverflow的新手,所以我不知道这个,谢谢你的教育
$this->load->library('controllerlist');
$list = $this->controllerlist->getControllers();
print_r($list);