$patterns = [
"POST" => "/^\/user$/i",
"GET" => ["/^\/user\/(\d+)/i", "/^\/user$/i"],
//获取详细信息和列表信息,这里支持了多模式,所以是个数组
];
$functions = [
"POST" => function ($request) {
$ret =1;
if ($ret) {
return ["status" => "新增用户成功"];
}
return false;
},
"GET" => [function ($matchs, $request)
{
//相应的这里也变成了一个函数
var_dump($matchs);
$userid = 0;
$delay = false;
if ($matchs) {
$userid = $matchs[1];
return $userid;
}
return false;
},
function ($matchs,$request) {
var_dump($matchs);
//取出用户列表信息
return false;
}
]
];
function getMatchIndex($method, $rqpath) //由于匹配变成了数组形式,因此这里要返回
{
global $patterns, $functions;
$getPattern = $patterns[$method];
if ($getPattern) {
if (is_array($getPattern)) //如果是数组 做单独处理
{
$index = 0;
foreach ($getPattern as $p) //循环判断是否匹配,匹配上了 则取出 相关的函数和匹配结果
{
if (preg_match($p, $rqpath, $matchs)) {
return ["func" => $functions[$method][$index], "matchs" => $matchs];
}
$index++;
}
} else //不是数组则直接返回
{
//PHP路由类
if (preg_match($getPattern, $rqpath, $matchs)) {
return ["func" => $functions[$method], "matchs" => $matchs];
}
}
}
return false;
}
$request=1;
$requestMethod='GET';
$requestPath='/user';
if (isset($patterns[$requestMethod]) && ($mathResult = getMatchIndex($requestMethod, $requestPath)) !== false) {
$func = $mathResult["func"];
//是一个function
$result = $func($mathResult["matchs"], $request);
}
Last modification:January 31, 2020
© Allow specification reprint
One comment
不错不错,我喜欢看 www.jiwenlaw.com