我正在使用 wsdltophp 使用外部 wsdl。这为我生成了一个大型类结构,我希望通过 SwaggerUI 通过我的 API 来使用它。
这就是我注释 API 入口点的方式:
/**
* @OA\Post(
* path="/vf/alta/{registroFacturacionType}/{datosControlType}",
* operationId="vfAlta",
* description="",
* tags={"vf"},
* security={{"bearerAuth":{}}},
* @OA\Parameter(
* name="registroFacturacionType",
* in="path",
* required=true,
* description="",
* @OA\Schema(ref="#/components/schemas/RegistroFacturacionType")
* ),
* @OA\Parameter(
* name="datosControlType",
* in="path",
* required=true,
* description="",
* @OA\Schema(ref="#/components/schemas/DatosControlType")
* ),
* @OA\Response(
* response=200,
* description="",
* @OA\Schema(ref="RespuestaAltaFactuSistemaFacturacionType")
* )
* )
*/
我的主类的所有内部类都由字符串表示。如果我们只看第一个属性(IDFactura),这是由wsdltophp
生成的代码 /**
* The IDFactura
* @var \App\Application\ServiceReferences\Verifactu\StructType\IDFacturaExpedidaType|null
* @OA\Property()
*/
protected ?\App\Application\ServiceReferences\Verifactu\StructType\IDFacturaExpedidaType $IDFactura = null;
(@OA\Schema 也是由 wsdltophp 生成的)但很明显,我的 SwaggerUI 将这个内部类表示为一个简单的字符串。
由于这个 WSDL 是外部的,我无法控制它,也无法控制 wsdltophp 生成的代码,所以我正在寻找一种解决方案来避免更新/修改这些外部类
要解决内部类在 Swagger 中表示为字符串的问题,您可以在控制器或 API 入口点中使用
@OA\Schema
注释手动引用内部类的正确架构,而无需修改生成的 WSDL 类。
例如,您可以像这样显式定义
IDFacturaExpedidaType
的架构,而不是依赖自动检测:
/**
* The IDFactura
* @OA\Property(ref="#/components/schemas/IDFacturaExpedidaType")
* @var \App\Application\ServiceReferences\Verifactu\StructType\IDFacturaExpedidaType|null
*/
这可确保 Swagger 正确引用复杂类型,而不是将其视为字符串。