路由
控制器已经可以解决我们大多数场景,我们同时为大家提供了路由解决方案
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 下一篇:请求