| <?phpnamespaceHome\Controller;useCommon\Controller\BaseController;classAuthController  extendsBaseController{    /**     * @cc index主页面     */    publicfunctionindex(){        $modules= array('Home');  //模块名称        $i= 0;        foreach($modulesas$module) {            $all_controller= $this->getController($module);            foreach($all_controlleras$controller) {                $controller_name= $controller;                $all_action= $this->getAction($module, $controller_name);                foreach($all_actionas$action) {                    $data[$i] = array(                        'name'=>$module.'/'. $controller. '/'. $action,                        'status'=> 1,                        'desc'=>$this->get_cc_desc($module,$controller,$action)                    );                    $i++;                }            }        }        echo'<pre>';        print_r($data);    }    /**     * @cc 获取所有控制器名称     *     * @param $module     *     * @return array|null     */    protectedfunctiongetController($module){        if(empty($module)) returnnull;        $module_path= APP_PATH . '/'. $module. '/Controller/';  //控制器路径        if(!is_dir($module_path)) returnnull;        $module_path.= '/*.class.php';        $ary_files= glob($module_path);        foreach($ary_filesas$file) {            if(is_dir($file)) {                continue;            }else{                $files[] = basename($file, C('DEFAULT_C_LAYER').'.class.php');            }        }        return$files;    }    /**     * @cc 获取所有方法名称     *     * @param $module     * @param $controller     *     * @returnarray|null     */    protectedfunctiongetAction($module, $controller){        if(empty($controller)) returnnull;        $content= file_get_contents(APP_PATH . '/'.$module.'/Controller/'.$controller.'Controller.class.php');        preg_match_all("/.*?public.*?function(.*?)\(.*?\)/i", $content, $matches);        $functions= $matches[1];        //排除部分方法        $inherents_functions= array(<span style="color: #6a8759;">'_before_index'<span style="color: #cc7832;">,<span style="color: #6a8759;">'_after_index'<span style="color: #cc7832;">,</span></span></span></span>'_initialize','__construct','getActionName','isAjax','display','show','fetch','buildHtml','assign','__set','get','__get','__isset','__call','error','success','ajaxReturn','redirect','__destruct','_empty');        foreach($functionsas$func){            $func= trim($func);            if(!in_array($func, $inherents_functions)){              if(strlen($func)>0)   $customer_functions[] = $func;            }        }        return$customer_functions;    }    /**     * @cc 获取函数的注释     *     * @param $module Home     * @param $controller Auth     * @param $action index     *     * @return string 注释     *     */    protectedfunctionget_cc_desc($module,$controller,$action){        $desc=$module.'\Controller\\'.$controller.'Controller';        $func= new\ReflectionMethod(new$desc(),$action);        $tmp= $func->getDocComment();        $flag= preg_match_all('/@cc(.*?)\n/',$tmp,$tmp);        $tmp= trim($tmp[1][0]);        $tmp= $tmp!=''? $tmp:'无';        return$tmp;    }} | 
其中注释必须采用固定格式,
/*** @cc index主页面*/
适用于ThinkPHP 3.2.2 ,适合用auth 认证时,直接提取所有的控制器及方法名,可以获取注释。非常方便。
参考:
1、http://www.thinkphp.cn/code/718.html
2、http://www.thinkphp.cn/topic/10357.html
 
 







