<?php namespace Home\Controller; use Common\Controller\BaseController; class AuthController extends BaseController{ /** * @cc index主頁面 */ public function index(){ $modules = array('Home'); //模塊名稱 $i = 0; foreach ($modules as $module) { $all_controller = $this->getController($module); foreach ($all_controller as $controller) { $controller_name = $controller; $all_action = $this->getAction($module, $controller_name); foreach ($all_action as $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 */ protected function getController($module){ if(empty($module)) return null; $module_path = APP_PATH . '/' . $module . '/Controller/'; //控制器路徑 if(!is_dir($module_path)) return null; $module_path .= '/*.class.php'; $ary_files = glob($module_path); foreach ($ary_files as $file) { if (is_dir($file)) { continue; }else { $files[] = basename($file, C('DEFAULT_C_LAYER').'.class.php'); } } return $files; } /** * @cc 獲取所有方法名稱 * * @param $module * @param $controller * * @return array|null */ protected function getAction($module, $controller){ if(empty($controller)) return null; $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('_before_index','_after_index','_initialize','__construct','getActionName','isAjax','display','show','fetch','buildHtml','assign','__set','get','__get','__isset','__call','error','success','ajaxReturn','redirect','__destruct','_empty'); foreach ($functions as $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 注釋 * */ protected function get_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