ERROR_RESPONSES
ERROR_RESPONSES = [400 => '响应-参数错误', 401 => '响应-未认证', 403 => '响应-无权限', 404 => '响应-资源不存在', 429 => '响应-限流', 500 => '响应-服务端错误']
错误状态码 → 复用响应组件名。
接口文档增强器
职责:在 Scramble 生成 OpenAPI 文档后完成四件事—— ① 文档首页注入项目 API 总览(响应包装/状态码/认证/限流/权限模型约定); ② 字段描述分层注入:响应包装层、模型 Schema 层、请求 Schema 层各归其位, 杜绝全局描述串位(如 company.code 被套上业务状态码说明); ③ 语义增强:固定取值字段注入 enum 与 x-enumDescriptions、关键字段注入示例、 标准错误响应以复用组件引用挂到每个接口; ④ 结构修正:分页 meta 字段类型、data.list 模型引用与缺失模型 Schema 补全、 store 请求 required 字段补全。
所有注册表集中在分区 8,是接口文档内容的唯一事实源;控制器注解与模型
$ : \App\Support\注解仅作代码注释,文档渲染以本注册表为准。
┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 注册表缓存属性 静态缓存与错误响应组件名映射 分区 2 · 转换入口 handle(主流程编排) 分区 3 · 文档级装配 首页总览 / 认证方案 / 标准错误响应 分区 4 · 响应包装层整理 包装描述 / 分页结构 / meta 类型 / data 模型引用 分区 5 · Schema 层整理 模型 Schema 补全与同步 / 请求 Schema 描述 分区 6 · 参数层整理 查询参数补全与描述 / 路径参数 / 枚举与示例注入 分区 7 · 请求必填修正 fixStoreRequiredFields / resolveInlineSchemaName 分区 8 · 注册表数据源 总览文案 / 包装与通用描述 / 枚举表 / 示例表 模型定义 / 请求字段描述 / 参数描述与端点参数表 └────────────────────────────────────────────────────────────┘
$wrapperDescs : array
$genericDescs : array
$fieldEnums : array
$fieldExamples : array
$modelDefs : array
$requestDefs : array
$paramDescs : array
$pathParamDescs : array
$endpointParams : array
handle(\Dedoc\Scramble\Support\Generator\OpenApi $document, \Dedoc\Scramble\OpenApiContext $context) : void
转换入口:按「文档级 → 包装层 → Schema 层 → 参数层」顺序装配文档。
流程:① 懒加载全部注册表 ② 首页总览与 Bearer 认证 ③ 注册标准错误响应组件 ④ 补全模型 Schema ⑤ 整理响应包装与分页结构 ⑥ 注入 Schema 层描述 ⑦ 整理查询/路径参数 ⑧ 内联请求体描述 ⑨ 补全 store 必填字段。
| \Dedoc\Scramble\Support\Generator\OpenApi | $document | |
| \Dedoc\Scramble\OpenApiContext | $context |
registerErrorResponses(\Dedoc\Scramble\Support\Generator\OpenApi $document) : void
注册标准错误响应组件,并按接口类型挂载引用。
公开接口挂 400/429/500;受保护接口挂 400/401/403/429/500, 含路径参数(模型绑定)的接口追加 404。422 由 Scramble 的 ValidationException 组件承载,不重复注入。
| \Dedoc\Scramble\Support\Generator\OpenApi | $document |
attachErrorResponses(\Dedoc\Scramble\Support\Generator\Operation $operation, \Dedoc\Scramble\Support\Generator\OpenApi $document, bool $isPublic, string $pathKey) : void
为单个操作挂载标准错误响应引用;同码响应以后挂载者为准。
| \Dedoc\Scramble\Support\Generator\Operation | $operation | |
| \Dedoc\Scramble\Support\Generator\OpenApi | $document | |
| bool | $isPublic | |
| string | $pathKey |
patchResponseEnvelopes(\Dedoc\Scramble\Support\Generator\OpenApi $document) : void
整理全部接口的 2xx 响应包装: ① code/message/data 只在包装层注入描述,杜绝串位到业务字段; ② 分页 data.list 修正为模型数组引用、meta 分页字段修正为 integer; ③ 列表/树形接口的 data 数组 items 指向对应模型 Schema。
| \Dedoc\Scramble\Support\Generator\OpenApi | $document |
patchEnvelope(\Dedoc\Scramble\Support\Generator\Types\ObjectType $type, \Dedoc\Scramble\Support\Generator\OpenApi $document, ?string $schemaName, string $path) : void
单接口响应包装整理。只处理顶层 { code, message, data } 结构。
| \Dedoc\Scramble\Support\Generator\Types\ObjectType | $type | |
| \Dedoc\Scramble\Support\Generator\OpenApi | $document | |
| ?string | $schemaName | |
| string | $path |
patchSpecialResponses(\Dedoc\Scramble\Support\Generator\Types\ObjectType $type, \Dedoc\Scramble\Support\Generator\OpenApi $document, string $path) : void
固定形状的特判响应:用户信息、目录分区、地区统计等 Scramble 无法推断的结构。
| \Dedoc\Scramble\Support\Generator\Types\ObjectType | $type | |
| \Dedoc\Scramble\Support\Generator\OpenApi | $document | |
| string | $path |
buildModelType(array $def, string $schemaName, \Dedoc\Scramble\Support\Generator\Components $components) : \Dedoc\Scramble\Support\Generator\Types\ObjectType
由模型定义构造 ObjectType(仅用于 Scramble 未生成的模型), 与同步路径一致地注入枚举与示例。
| array | $def | |
| string | $schemaName | |
| \Dedoc\Scramble\Support\Generator\Components | $components |
synchronizeModelSchema(\Dedoc\Scramble\Support\Generator\Types\ObjectType $type, array $def, string $schemaName, \Dedoc\Scramble\Support\Generator\Components $components) : void
同步已存在的模型 Schema:覆盖描述、注入枚举/示例、重建数组 items、清除 required。
| \Dedoc\Scramble\Support\Generator\Types\ObjectType | $type | |
| array | $def | |
| string | $schemaName | |
| \Dedoc\Scramble\Support\Generator\Components | $components |
buildItemsType(array $items, \Dedoc\Scramble\Support\Generator\Components $components) : \Dedoc\Scramble\Support\Generator\Types\Type
数组 items 规格 → Type 实例,支持字符串/对象/模型引用三种形态。
| array | $items | |
| \Dedoc\Scramble\Support\Generator\Components | $components |
buildObjectItemsType(array $fields, \Dedoc\Scramble\Support\Generator\Components $components) : \Dedoc\Scramble\Support\Generator\Types\ObjectType
items 内嵌对象规格 → ObjectType。
| array | $fields | |
| \Dedoc\Scramble\Support\Generator\Components | $components |
applyRequestSchema(\Dedoc\Scramble\Support\Generator\Types\ObjectType $type, string $schemaName) : void
请求 Schema 整理:类级描述收敛为一行,字段按注册表覆盖描述并注入枚举/示例。 覆盖而非填空——Scramble 会把 rules 行注释当作字段描述带进文档,须以注册表为准。
| \Dedoc\Scramble\Support\Generator\Types\ObjectType | $type | |
| string | $schemaName |
applyFieldSemantics(mixed $type, string $schemaName, string $fieldPath, bool $override = false) : void
递归注入字段语义:描述(注册表 > 通用表 > 保留原值)、枚举、示例。
| mixed | $type | |
| string | $schemaName | 所属 Schema 名,空表示无 Schema 上下文 |
| string | $fieldPath | 字段路径,如 positions.*.x |
| bool | $override | Schema 级注册表描述是否覆盖既有描述 |
ensureConfigSaveRequestBody(\Dedoc\Scramble\Support\Generator\OpenApi $document) : void
为裸 Request 的 PUT /admin/configs 创建请求体文档。
ConfigController::save 用裸 Request(动态配置键值对,无 FormRequest 类), Scramble 无法推断 requestBody → 文档缺 body;此处按 full-replace 语义 构造 { key: value, tabs?: {...} } 结构(additionalProperties 描述动态键)。
| \Dedoc\Scramble\Support\Generator\OpenApi | $document |