l5-swagger/swagger-php - 将组件添加到块中使其从输出中消失

l5-swagger/swagger-php - adding component to block makes it dissapear from the output

如果我将此响应添加到我的定义中:

@OA\Response(
    response="default",
    description="unexpected error",
    @OA\JsonContent(ref="#/components/schemas/ErrorModel"),
    @OA\XmlContent(ref="#/components/schemas/ErrorModel"),
    @OA\MediaType(
        mediaType="text/xml",
        @OA\Schema(ref="#/components/schemas/ErrorModel")
        ),
        @OA\MediaType(
          mediaType="text/html",
          @OA\Schema(ref="#/components/schemas/ErrorModel")
        )
 )

然后我将 Schema 放在下面:

/**
 * @OA\Schema(
 *     schema="ErrorModel",
 *     required={"code", "message"},
 *     @OA\Property(
 *         property="code",
 *         type="integer",
 *         format="int32"
 *     ),
 *     @OA\Property(
 *         property="message",
 *         type="string"
 *     )
 * )
 */

命令:php artisan l5-swagger:generate 没有错误,但是包含组件的响应定义的块不再包含在 json 中,而是包含在组件的架构中是吗?

我是否做了一些非常明显的错误,因为到目前为止我对图书馆的经验是,如果你做错了什么,它通常会告诉你。

如果这是一个新项目,则更改是您现在使用的是 swagger-php V4。在版本 4 中,分析器代码使用反射。这样做是为了可以使用注释或 PHP 8 个属性。

一个缺点是不再检测到 stand-alone 文档块,因为没有反射来访问它们。

在你的情况下,我认为有两个单独的 /** */ 块意味着只找到最后一个。

一种解决方法是在单个 /** */ 块中将所有注释放在 class 之前。 对于这种情况,另一种选择是使用(未使用的)虚拟 classes。

在这里,假设第一个注释有单独的响应 class,添加 class ErrorModel {} 你的架构也应该有效。

这同样适用于其他顶级注释,如@OA\Info 或其他。