[TOC]
控制器已经可以解决我们大多数场景,我们同时为大家提供了路由解决方案
* * * * *
### 一级路由
配置直接访问 http://域名.com 时的默认路由
~~~
class AppInit implements Init {
public function appInit(AutoFindHandlerMapping $autoMapping, Router $router) {
$router->index(IndexController::class, "index"); //绑定到控制器
//也支持直接使用闭包
$router->index(function() {
return 'index';
});
}
}
~~~
这时
>[info] 访问域名会访问到 IndexController的 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|
>[info]你可以巧妙的使用 miss 做很多事情
- 序言
- 开始
- 安装 RapPhp
- 应用目录
- 配置文件
- 入口类
- MVC架构
- 控制器基础
- 前置方法
- 拦截器
- 动态路由
- Request和Response
- Cookie和Session
- 模板引擎
- 请求缓存
- 流程图
- 数据库
- 基础使用
- 查询语法
- 查询操作
- where
- order
- limit
- lock
- fields
- join
- distinct
- having
- group
- force
- 查询方法
- 多数据源
- 数据库类型
- Record模型
- 使用Record
- 增删改
- 查找方法
- 数据类型
- 基本类型
- JSON 数据类型
- time
- date
- attach
- const
- 迭代操作
- record 更多方法
- 注入与转json
- 多级缓存
- 多数据源
- 模型生成
- 回调事件
- IOC控制反转
- Ioc基础概念
- 依赖注入
- Scope作用域
- 构造器
- 循环依赖
- AOP面向切面
- AOP使用
- 切面
- AopBuild
- 生成 aop 文件
- 事件勾子
- 执行循序
- Swoole
- Http服务器
- 用户进程
- Context上下文(重要)
- 协程
- 特色功能
- 限流器
- 连接池
- 数据库连接池
- Redis 连接池
- 通用连接池
- Rpc 远程调用
- Rpc服务提供方
- Rpc客户端
- 熔断器与服务降级
- Redis 分布式锁
- 其他功能
- 缓存
- redis
- 文件存储
- 存储简介
- 本地存储
- OSS存储
- 配置
- 日志
- 验证器
- FileUtil
- 数组Util
- Http工具
- 多语言
- 命令行
- 使用命令行
- 生成模型文件
- AOP动态文件生成
- swoole_http服务器
- 自定义命令行
- 异常与调试
- 异常抛出
- 异常处理
- 部署
- URL重写
- DOCKER 镜像(重要)
- 附录
- 回调事件
- 开发规范
- Swoole开发注意点
- 热点行更新排队机制
