使用属性的对象的 swagger-php 响应数组

swagger-php response array of objects using attributes

提问人:Kees Klomp 提问时间:6/16/2023 更新时间:8/23/2023 访问量:788

问:

只是学习使用属性来描述函数参数和响应。我正在尝试描述一个返回对象数组的响应对象,但到目前为止,使用数组的运气并不好,这就是我现在所拥有的,它返回一个对象,我希望它是一个对象数组:

#[OA\Response(
    response: 201,
    description: "Get the list",
    content: new OA\JsonContent(
        properties: [
            new OA\Property(
                property: "property name 1",
                type: "string",
                example: "value 1"
            ),
            new OA\Property(
                property: "property name 2",
                type: "string",
                example: "value 2"
            )
        ],
        type: 'object'
    )
)]

任何指导将不胜感激!

数组对象 属性 swagger-php

评论


答:

2赞 DerManoMann 6/17/2023 #1

一种典型的方法是使用对象架构的引用(如果有)。 例如,类似 https://github.com/zircote/swagger-php/blob/master/Examples/using-links-php81/RepositoriesController.php#L16

如果您更喜欢内联对象属性,它应该类似于以下内容(未经测试):

<?php

use OpenApi\Attributes as OA;

#[OA\Get(path: '/api/get')]
#[OA\Response(
    response: 201,
    description: "Get the list",
    content: new OA\JsonContent(
        type: 'array',
        items: new OA\Items(
        // your list item
            type: 'object',
            properties: [
                new OA\Property(
                    property: "property name 1",
                    type: "string",
                    example: "value 1"
                ),
                new OA\Property(
                    property: "property name 2",
                    type: "string",
                    example: "value 2"
                )
            ]
        )
    )
)]
class Controller
{
}

评论

0赞 Kees Klomp 6/19/2023
这就像一个魅力,非常感谢DerManoMan!
0赞 Neemias Santos 8/23/2023 #2

假设一个对象是一个单独的类,具有自己的 Open API 架构,您可以按如下所示声明它:

#[OA\Property(
        type: 'array',
        items: new OA\Items(
            oneOf: [
                new OA\Schema(ref: '#/components/schemas/CarsResult'),
                new OA\Schema(ref: '#/components/schemas/TrucksResult'),
            ]
        ),
        nullable: false
    )]