You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JSONSchema(draft7)转换为Swagger3以生成PHP Doctrine实体

JSONSchema批量生成Doctrine实体落地指南

一、JSONSchema转OpenAPI 3(Swagger3)实现方案

OpenAPI 3的Schema定义本身是JSON Schema Draft 7的超集,99%的Draft7关键字都可以直接兼容,转换逻辑非常轻量,完全可以自行实现批量转换,不需要依赖第三方重型库,核心逻辑如下:

  • 准备基础OpenAPI 3模板,把所有JSON Schema文件内容批量填充到模板的components.schemas节点下,仅需做极少量兼容调整即可
  • 若你的JSON Schema存在跨文件$ref引用,可先用justinrainbow/json-schema库的Resolver工具完成引用解析后再填充

极简批量转换代码示例:

// 初始化OpenAPI 3基础模板
$openapiTemplate = [
    'openapi' => '3.0.0',
    'info' => [
        'title' => 'SOAP入站消息模型库',
        'version' => '1.0.0'
    ],
    'paths' => new stdClass(),
    'components' => [
        'schemas' => []
    ]
];

// 批量遍历JSON Schema目录
foreach (glob('/path/to/your/jsonschema/*.json') as $schemaFile) {
    $schemaContent = json_decode(file_get_contents($schemaFile), true);
    $schemaName = basename($schemaFile, '.json');
    // 非特殊场景无需修改Schema内容,直接填充即可
    $openapiTemplate['components']['schemas'][$schemaName] = $schemaContent;
}

// 输出最终OpenAPI 3文件
file_put_contents(
    '/path/to/output/openapi.json',
    json_encode($openapiTemplate, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)
);

二、基于OpenAPI文件生成Doctrine实体

你选择的转OpenAPI再通过Api Platform Schema Generator生成实体的方案是最优解,生成前调整Schema Generator的配置项即可得到无冗余、包含完整关联和校验规则的实体:

  • 开启doctrineAnnotations: true:自动生成Doctrine ORM相关注解
  • 开启validationAnnotations: true:自动将JSON Schema中的校验规则(长度、格式、取值范围等)转换为Symfony Validation注解
  • 开启associations: true:自动识别Schema中的嵌套对象、引用关系,生成对应的OneToMany/ManyToOne等关联注解
  • 开启generateGetterSetter: true:自动生成类属性的存取方法,无需手动补充

三、备选方案参考

  • 先用Swaggest生成PHP模型再转实体:需要自行开发注解注入逻辑,批量处理成本比转OpenAPI方案高30%左右,仅适合不需要复用OpenAPI文件的场景
  • 先转MySQL表结构再反向生成实体:大概率丢失JSON Schema中的细粒度校验规则,嵌套对象的关联关系容易生成错误,除非有自动建表的强需求否则不推荐

内容的提问来源于stack exchange,提问作者Jakub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:15:03