• 路由
    • Router路由
      • 直接访问域名
    • 完整的 router 实例
      • router方法
    • 设置匹配条件

    路由

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

    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   下一篇:请求