mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-07 23:22:48 +08:00
Route类的register方法调整 路由定义规则调整 增加option参数 可以设置更多匹配条件
This commit is contained in:
@@ -12,14 +12,7 @@
|
|||||||
namespace Think;
|
namespace Think;
|
||||||
class Route {
|
class Route {
|
||||||
// 路由规则
|
// 路由规则
|
||||||
static private $rules = [
|
static private $rules = [];
|
||||||
'GET' => [],
|
|
||||||
'POST' => [],
|
|
||||||
'PUT' => [],
|
|
||||||
'DELETE' => [],
|
|
||||||
'*' => [],
|
|
||||||
];
|
|
||||||
|
|
||||||
// URL映射规则
|
// URL映射规则
|
||||||
static private $map = [];
|
static private $map = [];
|
||||||
// 子域名部署规则
|
// 子域名部署规则
|
||||||
@@ -44,43 +37,39 @@ class Route {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 注册路由规则
|
// 注册路由规则
|
||||||
static public function register($rule,$route='',$type='GET'){
|
static public function register($rule,$route='',$option=[]){
|
||||||
if(strpos($type,'|')) {
|
if(is_array($rule)) {
|
||||||
foreach (explode('|',$type) as $val){
|
foreach ($rule as $key=>$val){
|
||||||
self::register($rule,$route,$val);
|
self::$rules[$key] = ['route'=>$val,'option'=>$option];
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
if(is_array($rule)) {
|
self::$rules[$rule] = ['route'=>$route,'option'=>$option];
|
||||||
self::$rules[$type] = array_merge(self::$rules[$type],$rule);
|
|
||||||
}else{
|
|
||||||
self::$rules[$type][$rule] = $route;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 注册任意请求的路由规则
|
// 注册任意请求的路由规则
|
||||||
static public function any($rule,$route=''){
|
static public function any($rule,$route='',$option=[]){
|
||||||
self::register($rule,$route,'*');
|
self::register($rule,$route,array_diff_key($option,['method'=>'']));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 注册get请求的路由规则
|
// 注册get请求的路由规则
|
||||||
static public function get($rule,$route=''){
|
static public function get($rule,$route='',$option=[]){
|
||||||
self::register($rule,$route,'GET');
|
self::register($rule,$route,array_merge($option,['method'=>'GET']));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 注册post请求的路由规则
|
// 注册post请求的路由规则
|
||||||
static public function post($rule,$route=''){
|
static public function post($rule,$route='',$option=[]){
|
||||||
self::register($rule,$route,'POST');
|
self::register($rule,$route,array_merge($option,['method'=>'POST']));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 注册put请求的路由规则
|
// 注册put请求的路由规则
|
||||||
static public function put($rule,$route=''){
|
static public function put($rule,$route='',$option=[]){
|
||||||
self::register($rule,$route,'PUT');
|
self::register($rule,$route,array_merge($option,['method'=>'PUT']));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 注册delete请求的路由规则
|
// 注册delete请求的路由规则
|
||||||
static public function delete($rule,$route=''){
|
static public function delete($rule,$route='',$option=[]){
|
||||||
self::register($rule,$route,'DELETE');
|
self::register($rule,$route,array_merge($option,['method'=>'DELETE']));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检测子域名部署
|
// 检测子域名部署
|
||||||
@@ -150,12 +139,23 @@ class Route {
|
|||||||
return self::parseUrl(self::$map[$regx]);
|
return self::parseUrl(self::$map[$regx]);
|
||||||
}
|
}
|
||||||
// 路由规则检测
|
// 路由规则检测
|
||||||
$rules = self::$rules[$_SERVER['REQUEST_METHOD']];
|
if(!empty(self::$rules)) {
|
||||||
if(!empty(self::$rules['*'])) {
|
foreach (self::$rules as $rule=>$val){
|
||||||
$rules = array_merge(self::$rules['*'],$rules);
|
$route = $val['route'];
|
||||||
}
|
$option = $val['option'];
|
||||||
if(!empty($rules)) {
|
|
||||||
foreach ($rules as $rule=>$route){
|
// 请求类型检测
|
||||||
|
if(isset($option['method']) && false === stripos($option['method'],$_SERVER['REQUEST_METHOD'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 伪静态后缀检测
|
||||||
|
if(isset($option['ext']) && __EXT__ != $option['ext']) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// https检测
|
||||||
|
if(!empty($option['https']) && !self::isSsl()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if(0===strpos($rule,'/') && preg_match($rule,$regx,$matches)) { // 正则路由
|
if(0===strpos($rule,'/') && preg_match($rule,$regx,$matches)) { // 正则路由
|
||||||
if($route instanceof \Closure) {
|
if($route instanceof \Closure) {
|
||||||
// 执行闭包并中止
|
// 执行闭包并中止
|
||||||
@@ -175,7 +175,7 @@ class Route {
|
|||||||
$rule = substr($rule,0,-1);
|
$rule = substr($rule,0,-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($var = self::match($regx,$rule)){
|
if(false !== $var = self::match($regx,$rule)){
|
||||||
if($route instanceof \Closure) {
|
if($route instanceof \Closure) {
|
||||||
// 执行闭包并中止
|
// 执行闭包并中止
|
||||||
self::invokeRule($route,$var);
|
self::invokeRule($route,$var);
|
||||||
@@ -191,6 +191,19 @@ class Route {
|
|||||||
return self::parseUrl($regx);
|
return self::parseUrl($regx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断是否SSL协议
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
static public function isSsl() {
|
||||||
|
if(isset($_SERVER['HTTPS']) && ('1' == $_SERVER['HTTPS'] || 'on' == strtolower($_SERVER['HTTPS']))){
|
||||||
|
return true;
|
||||||
|
}elseif(isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'] )) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// 执行正则匹配下的闭包方法 支持参数调用
|
// 执行正则匹配下的闭包方法 支持参数调用
|
||||||
static private function invokeRegx($closure,$var=[]) {
|
static private function invokeRegx($closure,$var=[]) {
|
||||||
$reflect = new \ReflectionFunction($closure);
|
$reflect = new \ReflectionFunction($closure);
|
||||||
|
|||||||
Reference in New Issue
Block a user