控制器已经可以解决我们大多数场景,我们同时为大家提供了路由解决方案 ### Router路由 * * * * * #### 直接访问域名 配置直接访问 http://域名.com 时的默认路由 ~~~ class AppInit implements Init { public function appInit(AutoFindHandlerMapping $autoMapping, Router $router) { $router->index(IndexController::class, "index"); //绑定到控制器 //也支持直接使用闭包 $router->index(function() { return 'index'; }); } } ~~~ 这时 >[info] /test 路径会访问到 IndexController的 test 方法 ### 完整的 router 实例 ~~~ class AppInit implements Init{ public function appInit(AutoFindHandlerMapping $autoMapping, Router $router){ //全局定义变量中包含id 为 int 类型 name 为string类型 $router->intVarContain("id")->lettersVar("name"); //绑定到类 $router->when("a/b/:id")>bindCtr(SassController::class,"b"); //分组 forum 注意没有/ $router->group("forum")->then(function(Router $router){ //路径匹配 $router->when("cat/:id/add")->toDo(function($id,$name){ return ['success'=>12,'name'=>$name]; }); //路径匹配 同时绑定到类的方法 $router->when("sass/save")->bindCtr(SassController::class," save"); //路径匹配 同时要求是 post 类型 id是 int 类型 进行参数绑定 $router->when("cat/:id/save")->post()->int("id")->toDo(function($id,$name,Article $article,HttpResponse $response){ $response->assign("article",$article); $response->assign("name",$name); return '/index.tpl'; }); //分组下没有找到 $router->whenMiss(function(){ return ['success'=>true]; }); }); //分组show $router->group("show")->then(function(Router $router){ $router->when("cat/:id/add")->toDo(function($id,$name){ return ['success'=>12,'name'=>$name]; }); }); $router->whenMiss(function(){ return ['success'=>true,'msg':'找不到对应路径']; }); } } ~~~ 看代码我们可以很快看出定义的路由 | 路径 |备注 | | --- | --- | | /forum/cat/:id/add | | | /forum/sass/save | | | /forum/xxxx | 找不到都会进对应分组的whenMiss | | /show/cat/:id/add | | | /a/b | | | /xxxx | 完全找不到进入最后的whenMiss | 路由可以通过 Closure内部函数进行回调,也可以直接绑定到类的方法上 > 路由的参数绑定规则和控制器的参数绑定规则相同,同时能接受 :定义的参数 #### router方法 | 方法名 |注释 | | --- | --- | | intVar(xxx) | 变量xxx是int类型 | | intVarContain(xxx) | 变量包含xxx是int类型 | | lettersVar(xxx) | 变量xxx是字母类型 | | regexVar(xxx) | 变量xxx是符合正则 | | group | 分组 | | whenMiss | miss 回调 | ### 设置匹配条件 * * * * * | 方法名 |注释 | | --- | --- | | get | 要求访问类型是 get | | post | 要求访问类型是 post| | put | 要求访问类型是 put| | patch | 要求访问类型是 patch| | header | 要求请求头包含| | bindCtr | 绑定到控制器 | | toDo | 方法回调 | | ext| 要求后缀是 | | extDeny | 要求后缀不是 | | https | 要求是 https|