From 44979c670f6b5b783e64471be4d37b63e82ecbe3 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 25 Dec 2020 16:53:44 +0800 Subject: [PATCH] update docs --- docs/advanced/inside-class.md | 29 ++++++++ docs/event/路由注解事件.md | 124 +++++++++++++++++++++++++++++++++- mkdocs.yml | 1 + src/ZM/global_functions.php | 3 +- 4 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 docs/advanced/inside-class.md diff --git a/docs/advanced/inside-class.md b/docs/advanced/inside-class.md new file mode 100644 index 00000000..56c7e1fc --- /dev/null +++ b/docs/advanced/inside-class.md @@ -0,0 +1,29 @@ +# 内部类文件手册 + +这个章节写明了在框架使用过程中可能涉及到的框架内部或 Swoole、其他 composer 依赖组件的内部类,这里会根据类的命名空间一一说明。 + +## Swoole\Http\Request + +此类是 Swoole 内部的一个类,一般在收到 HTTP 请求时,在 `@RequestMapping` 或 `@OnSwooleEvent("request")` 两个注解下可用,用作获取 GET、POST参数,上传到后端的文件、Cookies 等。详见 [Swoole 文档 - Request](http://wiki.swoole.com/#/http_server?id=httprequest) 。 + +### 属性 + +- `$fd`:获取当前连接的文件描述符 ID。 +- `$header`:`HTTP` 请求的头部信息。类型为数组,所有 `key` 均为小写。 +- `$server`:`HTTP` 请求相关的服务器信息。 +- `$cookie`:获取 Cookies。 +- `$get`:获取 GET 参数。 +- `$post`:获取 POST 参数。 +- `$files`:获取上传的文件信息 + +### 方法 + +- `rawContent()`:获取 POST 包原始二进制内容,相当于原生 PHP 的 ` file_get_contents("php://input");` 。 +- `getData()`:获取完整的原始 `Http` 请求报文。包括 `Http Header` 和 `Http Body` + +### 示例 + +```php +TODO:先放一放。 +``` + diff --git a/docs/event/路由注解事件.md b/docs/event/路由注解事件.md index 43a805d2..8fa46da2 100644 --- a/docs/event/路由注解事件.md +++ b/docs/event/路由注解事件.md @@ -1,3 +1,125 @@ # 路由注解事件 -TODO:师傅,莫催,快肝完了! \ No newline at end of file +炸毛框架提供了一个简易但是高效易用的 HTTP 路由注解,你可以使用路由功能来开发任何 Web 应用微服务、API 接口、中间件等。 + +!!! quote "开发提示" + + 本章节涉及的路由和控制器概念可能和其他传统框架有一些出入,而且炸毛框架非绝对根据 PSR 标准进行开发,目的是使用上一些常见的东西尽可能地灵活和不罗嗦。 + +## 控制器和路由 + +Controller 和 Route 为路由注解事件的核心注解事件,其中 Controller 的注解事件为 `@Controller`,Route 的注解事件为 `@RequestMapping`。 + +### Controller() + +#### 属性 + +| 类型 | 值 | +| ---------- | ------------------------------- | +| 名称 | `@Controller` | +| 触发前提 | 当路由 url 匹配到时进入触发 | +| 命名空间 | `ZM\Annotation\Http\Controller` | +| 适用位置 | 类 | +| 返回值处理 | 对类注解修饰,无返回值 | + +#### 参数 + +| 参数名称 | 参数范围 | 用途 | 默认 | +| -------- | -------------- | ------------ | ---- | +| prefix | `string`,必需 | 控制器的 url | 空 | + +### RequestMapping() + +#### 属性 + +| 类型 | 值 | +| ---------- | ----------------------------------------------------------- | +| 名称 | `@RequestMapping` | +| 触发前提 | 当路由 url 匹配到时进入触发 | +| 命名空间 | `ZM\Annotation\Http\RequestMapping` | +| 适用位置 | 方法 | +| 返回值处理 | 返回类型是 `string` 时,自动调用 HTTP 响应并返回 200 状态码 | + +#### 参数 + +| 参数名称 | 参数范围 | 用途 | 默认 | +| -------------- | ----------------------------------------------------------- | -------------------------- | ------------------------------------------ | +| route | `string`,必需 | 控制器的 url | 空 | +| name | `string` | 路由的名称 | 空 | +| request_method | `array`,限定 `RequestMethod::GET` 等常量 | 限制激活路由的 HTTP 方法 | `[RequestMethod::GET,RequestMethod::POST]` | +| params | `array`,当路由中含有如 `{id}` 类似的动态路由时,会动态改变 | 动态参数的路由参数值的绑定 | `[]` | + +#### 函数调用参数 + +- `$param`:如果路由中存在变量(动态路由),则会把动态路由所匹配的参数放入 `$param` 数组中。 + +```php +/** + * @RequestMapping(route="/test/{ass}") + */ +public function testName($param) { + return "Your name is ".($param["ass"] ?? "unknown"); +} +``` + + + +### 路由示例 + +=== "代码" + ```php + getResponse()->end("This is API index page"); // 使用上下文获取响应对象 + } + /** + * @RequestMapping("/ping") + */ + public function ping(){ + return "pong"; // 直接返回字符串 + } + } + ``` + +=== "效果" + + !!! example "效果描述" + 当访问浏览器的 `http://localhost:20001/api/index` 时,浏览器会返回 `This is API index page`,当访问 `/api/ping` 的 url 时,浏览器会返回 `pong`。 + + ``` + / -> 无任何路由 + /api/index -> Hello->index + /api/ping -> Hello->ping + ``` + +!!! tip "提示" + + 当 `@Controller` 为 `/` 的时候,效果和不写是一样的,`@RequestMapping` 为 `/` 或 `/index/inside` 等多级路由也是可以的。 + +### 绑定参数 + +在 `@RequestMapping` 中,不仅可以写静态的路由地址,也可以写绑定的参数。例如:`@RequestMapping(route="/index/{name}")`,则访问 `/index/xxx` 的时候,你在函数方法内可以这样获取此参数: + +```php +/** + * @RequestMapping("/index/{name}") + */ +public function index($arg) { + return "Your param 'name' is ".$arg["name"]; +} +``` + +## 获取请求参数 GET / POST + +炸毛框架支持获取外部 HTTP 请求进来的 GET 和 POST 请求,通过获取 HTTP 请求对象 [`Request`](/advanced/inside-class/) 即可。 \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index a9f3a75f..515274ca 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -71,6 +71,7 @@ nav: - 进阶开发: - 进阶开发: advanced/index.md - 从 v1 升级: advanced/to-v2.md + - 内部类文件手册: advanced/inside-class.md - FAQ: - FAQ: FAQ.md - 更新日志: diff --git a/src/ZM/global_functions.php b/src/ZM/global_functions.php index b10a5069..aa9c2115 100644 --- a/src/ZM/global_functions.php +++ b/src/ZM/global_functions.php @@ -290,8 +290,9 @@ function bot() { /** * 获取同类型所有连接的文件描述符 ID - * @author 854854321 + * @param string $type * @return array + * @author 854854321 */ function getAllFdByConnectType(string $type = 'default'): array { $fds = [];