【问题标题】:Swagger - "Required @OA\Info() not found"Swagger - \"未找到所需的@OA\\Info()\"
【发布时间】:2022-11-22 02:43:26
【问题描述】:

我刚刚进入 api 文档并尝试使用 Swagger

这是我的 php 文件,其中包含我要记录的路由:

<?php

use OpenApi\Annotations as OA;

/**
 * @OA\Info(title="My First API", version="0.1")
 */
return [
    /**
     * @OA\Get(
     *     path="/api/v1/test",
     *     @OA\Response(response="200", description="An example resource")
     * )
     */
    'GET api/v1/test' => 'test/index',
];

但是当我运行 ./vendor/bin/openapi api/config/routes.php cli 时只输出错误:

Warning: Required @OA\Info() not found
Warning: Required @OA\PathItem() not found
openapi: 3.0.0

然后我尝试了 Swagger2,它工作得很好

我使用来自php:8.1-fpm-alpine docker 镜像的php8.1,最新的zircote/swagger-php 包和 Yii2 框架

【问题讨论】:

    标签: php openapi swagger-php


    【解决方案1】:

    或者,您也可以将 -b ./vendor/autoload.php 添加到 openapi 命令以设置 swagger-php 的自动加载。

    无论哪种方式,我都很惊讶这适用于 swagger-php v4,因为它需要将注释锚定到结构元素(类、接口等)

    这里的主要想法是注释您的实际控制器(或在您的框架中调用的任何控制器),以便处理请求的代码使文档接近实际代码。

    【讨论】:

    • 是的,抱歉,忘了说我创建了一个编译路由器,它将所有路由锚定到特定类;此外,纯-b autoload.php在yii2中不起作用,因为yii2在初始化时加载项目类,因此您需要运行控制台应用程序
    【解决方案2】:

    原来 openapi 没有从我的子文件夹中自动加载类

    解决方案非常简单:从控制台应用程序内部生成文档(例如我有一个 php yii open-api/generate-docs 命令)

    这样 composer 和 yii2 就加载了 swagger 所需的所有类

    您还必须将所有属性锚定到特定类,这样原始问题中的方法将不起作用;我的解决方案是创建一个编译路由器,每个路由都有一个带有 php8.1 属性的单独类

    【讨论】:

      【解决方案3】:

      这是解决方案 https://github.com/DarkaOnLine/L5-Swagger/issues/443

      添加您的基本控制器

      <?php
      
      namespace AppHttpControllers;
      
      use IlluminateFoundationBusDispatchesJobs;
      use IlluminateRoutingController as BaseController;
      use IlluminateFoundationValidationValidatesRequests;
      use IlluminateFoundationAuthAccessAuthorizesRequests;
      
      /**
       * @OAInfo(title="My First API", version="0.1")
       */
      class Controller extends BaseController
      {
          use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
      }
      

      【讨论】:

        猜你喜欢
        • 2022-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 2017-12-01
        • 2019-05-25
        • 2019-05-10
        相关资源
        最近更新 更多