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

使用zircote/swagger-php 2.x提交对象数组参数的方案问询

解决zircote/swagger-php ^2.0中Query参数为对象数组的问题

你遇到的问题是Swagger 2.0规范本身的限制:当参数位置是in="query"时,直接用type="array"搭配@SWG\Items(type="object")是不被允许的——Query参数的数组元素只能是简单类型(字符串、数字、布尔值等),不能直接定义为对象。不过不用转成JSON字符串数组,有更合规的解决方案:

改用@SWG\Schema包裹数组对象结构

在@SWG\Parameter内部,不要直接设置type="array",而是用@SWG\Schema来定义完整的数组+对象结构,这样swagger-php就能正确识别了。示例代码如下:

/**
 * @SWG\Parameter(
 *     name="foo",
 *     in="query",
 *     required=true,
 *     @SWG\Schema(
 *         type="array",
 *         @SWG\Items(
 *             type="object",
 *             @SWG\Property(property="id", type="string"),
 *             @SWG\Property(property="position", type="string")
 *         )
 *     )
 * )
 */

关于参数传递格式

这种定义对应的前端传递格式应该是嵌套键值对,比如:

foo[0][id]=abc123&foo[0][position]=top&foo[1][id]=def456&foo[1][position]=bottom

大部分后端框架(比如Laravel、Symfony)都能自动解析这种格式为对象数组。

为什么原来的写法不行?

zircote/swagger-php ^2.0严格遵循Swagger 2.0规范:Query参数的type="array"仅支持元素为简单类型的数组,而对象数组的结构需要通过schema属性来定义,这样才能绕过简单类型的限制,同时符合规范要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:19:37