如何将Swagger Inspector生成的YAML结果转换为PHP attributes?
Swagger Inspector生成YAML转PHP OpenAPI Attributes实现方案
Swagger Inspector本身没有内置直接导出PHP Attributes格式文档的功能,你可以通过以下两种方式实现转换:
基于现有依赖自动转换
如果你项目里已经安装了zircote/swagger-php(也就是写OpenAPI注解用的属性依赖),它本身自带OpenAPI YAML/JSON文件转PHP Attributes代码的能力,操作步骤如下:- 把Swagger Inspector生成的完整YAML内容保存到本地文件,例如命名为
inspector-generated.yaml - 在项目根目录执行转换命令:
./vendor/bin/openapi --generate-attributes --input inspector-generated.yaml --output ./src/Api/- 生成的代码会自动匹配
OA\Post、OA\RequestBody、OA\Property这类标准属性结构,你只需要根据业务逻辑调整对应承载类的类名、补全Swagger Inspector没抓取到的必填标识、参数校验规则即可,基础的路径、请求方法、数据结构都会自动生成,不需要逐行手写。
- 把Swagger Inspector生成的完整YAML内容保存到本地文件,例如命名为
手动转换映射规则(自动生成有偏差时可手动调整)
YAML结构和PHP Attributes的对应关系非常固定,手动调整时按以下规则映射即可:- YAML中
paths下的一级键值,对应OA\Get/OA\Post等请求方法属性的path参数,HTTP方法名直接对应属性类名 - YAML中
requestBody节点,直接对应new OA\RequestBody()实例,节点下的description、required等字段直接作为实例的构造参数传入 - YAML中
content下的媒体类型键(如application/json、multipart/form-data),对应new OA\MediaType()实例的mediaType参数 - YAML中
schema.properties下的每一个字段,对应一个new OA\Property()实例,字段名、字段类型直接照搬YAML配置即可,数组类型的嵌套items节点按相同规则递归生成对应结构。
- YAML中
以下是对应提供的YAML片段转换后的参考代码,和期望的格式完全匹配:
<?php use OpenApi\Attributes as OA; #[OA\Post( path: '/api/package', description: 'Auto generated using Swagger Inspector', requestBody: new OA\RequestBody( content: new OA\MediaType( mediaType: 'application/json', schema: new OA\Schema( type: 'object', properties: [ new OA\Property( property: 'software', type: 'array', items: new OA\Items( type: 'object', properties: [ new OA\Property( property: 'package', type: 'string' ), new OA\Property( property: 'version', type: 'string' ) ] ) ) ] ) ) ) )] class PackageApi { }
内容的提问来源于stack exchange,提问作者L01C
相关产品推荐
相关产品推荐

