From ff12dd48f2aa1256d5dc7fc1cd3ff1a036e0dc36 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Wed, 10 Apr 2013 17:19:30 +0800 Subject: [PATCH] =?UTF-8?q?Think\Route=E7=B1=BB=E8=B0=83=E6=95=B4=20?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=AF=B9rest=E8=B7=AF=E7=94=B1=E8=A7=84?= =?UTF-8?q?=E5=88=99=E7=9A=84=E5=AE=9A=E4=B9=89=E6=94=AF=E6=8C=81=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=AE=9A=E4=B9=89=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Think/Route.php | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/Think/Route.php b/Think/Route.php index c8e4cae0..512d316b 100644 --- a/Think/Route.php +++ b/Think/Route.php @@ -12,7 +12,13 @@ namespace Think; class Route { // 路由规则 - static private $rules = []; + static private $rules = [ + 'GET' => [], + 'POST' => [], + 'PUT' => [], + 'DELETE' => [], + '*' => [], + ]; // URL映射规则 static private $map = []; // 子域名部署规则 @@ -37,39 +43,39 @@ class Route { } // 注册路由规则 - static public function register($rule,$route='',$option=[]){ + static public function register($rule,$route='',$type='GET',$option=[]){ if(is_array($rule)) { foreach ($rule as $key=>$val){ - self::$rules[$key] = ['route'=>$val,'option'=>$option]; + self::$rules[$type][$key] = ['route'=>$val,'option'=>$option]; } }else{ - self::$rules[$rule] = ['route'=>$route,'option'=>$option]; + self::$rules[$type][$rule] = ['route'=>$route,'option'=>$option]; } } // 注册任意请求的路由规则 static public function any($rule,$route='',$option=[]){ - self::register($rule,$route,array_diff_key($option,['method'=>''])); + self::register($rule,$route,'*',$option); } // 注册get请求的路由规则 static public function get($rule,$route='',$option=[]){ - self::register($rule,$route,array_merge($option,['method'=>'GET'])); + self::register($rule,$route,'GET',$option); } // 注册post请求的路由规则 static public function post($rule,$route='',$option=[]){ - self::register($rule,$route,array_merge($option,['method'=>'POST'])); + self::register($rule,$route,'POST',$option); } // 注册put请求的路由规则 static public function put($rule,$route='',$option=[]){ - self::register($rule,$route,array_merge($option,['method'=>'PUT'])); + self::register($rule,$route,'PUT',$option); } // 注册delete请求的路由规则 static public function delete($rule,$route='',$option=[]){ - self::register($rule,$route,array_merge($option,['method'=>'DELETE'])); + self::register($rule,$route,'DELETE',$option); } // 检测子域名部署 @@ -138,16 +144,17 @@ class Route { if(isset(self::$map[$regx])) { // URL映射 return self::parseUrl(self::$map[$regx]); } + // 获取当前请求类型的路由规则 + $rules = self::$rules[REQUEST_METHOD]; + if(!empty(self::$rules['*'])) { // 合并任意请求的路由规则 + $rules = array_merge(self::$rules['*'],$rules); + } // 路由规则检测 - if(!empty(self::$rules)) { - foreach (self::$rules as $rule=>$val){ + if(!empty($rules)) { + foreach ($rules as $rule=>$val){ $route = $val['route']; $option = $val['option']; - // 请求类型检测 - if(isset($option['method']) && false === stripos($option['method'],$_SERVER['REQUEST_METHOD'])) { - continue; - } // 伪静态后缀检测 if(isset($option['ext']) && __EXT__ != $option['ext']) { continue; @@ -156,6 +163,12 @@ class Route { if(!empty($option['https']) && !self::isSsl()) { continue; } + // 自定义检测 + if(!empty($option['callback']) && is_callable($option['callback'])) { + if(false === call_user_func($option['callback'])) { + continue; + } + } if(0===strpos($rule,'/') && preg_match($rule,$regx,$matches)) { // 正则路由 if($route instanceof \Closure) { // 执行闭包并中止