GitHub地址:https://github.com/nikic/FastRoute/tree/v1.3.0
引入nikic/fast-route包
# 本次引入的是1.3.0版本的composer包
composer require nikic/fast-route v1.3.0
编写路由配置加载方法
dispatch($httpMethod, $uri);
switch ($routeInfo[0]) {
case Dispatcher::NOT_FOUND: // 找不到请求方法
// ... 404 Not Found
throw new RouteNotFoundException("请求方法不存在:{$uri}");
break;
case Dispatcher::METHOD_NOT_ALLOWED: // 请求类型错误
$allowedMethods = $routeInfo[1];
// ... 405 Method Not Allowed
throw new MethodNotAllowedException("请求类型错误({$httpMethod}),当前方法允许请求类型({$allowedMethods[0]})");
break;
case Dispatcher::FOUND: // 找到请求方法:调用方法即可
$handler = $routeInfo[1];
$vars = $routeInfo[2];
call_user_func([new $handler[0],$handler[1]],$vars);
break;
}
}
private static function make_dispatcher($routeFileList)
{
return simpleDispatcher(function(RouteCollector $router) use($routeFileList) {
foreach ($routeFileList as $routeFile) {
if (isset($routeFile['prefix'])) {
$routers = $routeFile[0];
$router->addGroup($routeFile['prefix'],function(RouteCollector $router) use($routers) {
if ($routers) {
foreach ($routers as $routeItem) {
$router->addRoute(strtoupper($routeItem[0]),$routeItem[1],$routeItem[2]);
} unset($routeItem);
}
});
} else {
if ($routeFile) {
foreach ($routeFile as $routeItem) {
$router->addRoute(strtoupper($routeItem[0]),$routeItem[1],$routeItem[2]);
} unset($routeItem);
}
}
} unset($routeFile);
});
}
}
涉及到的exception类写法
创建编写功能路由文件,(演示:route/web.php、route/api.php)
文件的编写格式(可以对Route文件的make_dispatcher方法实现自定义)
'/',
[
['get','users',[\App\Controller\TestController::class,'index']],
]
];
测试
测试控制器
路由访问
由此,引入路由组件成功。
注:如果想扩展更多的使用方法,请访问文章开始处的github地址,查看更多使用方法。