- 路由
- Router路由
- 直接访问域名
- 完整的 router 实例
- router方法
- 设置匹配条件
- Router路由
路由
控制器已经可以解决我们大多数场景,我们同时为大家提供了路由解决方案
Router路由
直接访问域名
配置直接访问 http://域名.com 时的默认路由
class AppInit implements Init {public function appInit(AutoFindHandlerMapping $autoMapping, Router $router) {$router->index(IndexController::class, "index"); //绑定到控制器//也支持直接使用闭包$router->index(function() {return 'index';});}}
这时
/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 |
上一篇:拦截器Interceptor 下一篇:请求
