路由

控制器已经可以解决我们大多数场景,我们同时为大家提供了路由解决方案

Router路由


直接访问域名

配置直接访问 http://域名.com 时的默认路由

  1. class AppInit implements Init {
  2. public function appInit(AutoFindHandlerMapping $autoMapping, Router $router) {
  3. $router->index(IndexController::class, "index"); //绑定到控制器
  4. //也支持直接使用闭包
  5. $router->index(function() {
  6. return 'index';
  7. });
  8. }
  9. }

这时

/test 路径会访问到 IndexController的 test 方法

完整的 router 实例

  1. class AppInit implements Init{
  2. public function appInit(AutoFindHandlerMapping $autoMapping, Router $router){
  3. //全局定义变量中包含id 为 int 类型 name 为string类型
  4. $router->intVarContain("id")->lettersVar("name");
  5. //绑定到类
  6. $router->when("a/b/:id")>bindCtr(SassController::class,"b");
  7. //分组 forum 注意没有/
  8. $router->group("forum")->then(function(Router $router){
  9. //路径匹配
  10. $router->when("cat/:id/add")->toDo(function($id,$name){
  11. return ['success'=>12,'name'=>$name];
  12. });
  13. //路径匹配 同时绑定到类的方法
  14. $router->when("sass/save")->bindCtr(SassController::class," save");
  15. //路径匹配 同时要求是 post 类型 id是 int 类型 进行参数绑定
  16. $router->when("cat/:id/save")->post()->int("id")->toDo(function($id,$name,Article $article,HttpResponse $response){
  17. $response->assign("article",$article);
  18. $response->assign("name",$name);
  19. return '/index.tpl';
  20. });
  21. //分组下没有找到
  22. $router->whenMiss(function(){
  23. return ['success'=>true];
  24. });
  25. });
  26. //分组show
  27. $router->group("show")->then(function(Router $router){
  28. $router->when("cat/:id/add")->toDo(function($id,$name){
  29. return ['success'=>12,'name'=>$name];
  30. });
  31. });
  32. $router->whenMiss(function(){
  33. return ['success'=>true,'msg':'找不到对应路径'];
  34. });
  35. }
  36. }

看代码我们可以很快看出定义的路由

路径备注
/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分组
whenMissmiss 回调

设置匹配条件


方法名注释
get要求访问类型是 get
post要求访问类型是 post
put要求访问类型是 put
patch要求访问类型是 patch
header要求请求头包含
bindCtr绑定到控制器
toDo方法回调
ext要求后缀是
extDeny要求后缀不是
https要求是 https

上一篇:拦截器Interceptor   下一篇:请求