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

2022-10-11 21:14:08 142 0
魁首哥

GitHub地址:

引入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地址,查看更多使用方法。

收藏
分享
海报
0 条评论
142
上一篇:html5 canvas元素使用1 下一篇:phpstudy搭建PHP+Mysql服务

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码