PHP反射小試: 提取控制器的action方法
$v){// 1. 去掉基準路徑$v = str_replace($basepath,'',$v);// 2. 去掉尾碼$v = preg_replace('/\.php$/i','',$v);// 3. 拆分過濾 $v = Core_AppUtils::normalize($v,DIRECTORY_SEPARATOR);if (empty($v)) continue;$paths[$k] = implode('_',$v);}$d = array();foreach ($paths as $controller){$d[$controller] = self::getActionListFromControllerClass($controller);}return $d;}static function getActionListFromControllerClass($controller_name){static $controllerClassPrefix = null;if (!$controllerClassPrefix) {$controllerClassPrefix = Core_App::ini('mvc/web/dispatcher/controllerClassPrefix','Core_Controller_');}$clazz = "{$controllerClassPrefix}{$controller_name}";Core_Autoloader::loadClass($clazz,true);$obj = new ReflectionClass($clazz);$d = array();$publicMethods = $obj->getMethods(ReflectionMethod::IS_PUBLIC);foreach ($publicMethods as $method){if (preg_match('/^action/i',$method->name)) {$action_name = preg_replace('/^action/i','',$method->name);$rmd = Core_Mvc_Router::resourceEncode($controller_name,$action_name);$q = array_shift($rmd);$d[$q] = self::getAclResourceDescription($method->getDocComment());}}return array('description' => self::getAclResourceDescription($obj->getDocComment()),'actions' => $d);}static function getAclResourceDescription($finder){static $tagfinder_start = [email protected]{';static $tagfinder_end = '}aclres-finder-desc@';if (empty($finder)) return '';$start = stripos($finder,$tagfinder_start);if ($start){$end = stripos($finder,$tagfinder_end);if ($end && $end > $start){// 只有閉合的標籤才行$start = $start+strlen($tagfinder_start);return trim(substr($finder,$start,$end-$start));}}return '';}}?
1 樓 vb2005xu 2012-05-31
http://www.php10086.com/page/3 不錯的部落格
2 樓 vb2005xu 2012-05-31
http://opauth.org/
3 樓 vb2005xu 2012-06-01
http://www.shejidaren.com/category/css