搭建个人PHP框架--引入nikic/fast-route实现路由功能

目录

引入nikic/fast-route包

编写路由配置加载方法

涉及到的exception类写法

创建编写功能路由文件,(演示:route/web.php、route/api.php)

文件的编写格式(可以对Route文件的make_dispatcher方法实现自定义) 

入口文件处引入composer自动加载文件,并调用路由加载方法

测试

测试控制器

路由访问


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']],
    ]
];

入口文件处引入composer自动加载文件,并调用路由加载方法

测试

测试控制器

路由访问

你可能感兴趣的:(PHP,后端,php,后端)