首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swagger - "Required @OA\Info()未找到“

Swagger - "Required @OA\Info()未找到“
EN

Stack Overflow用户
提问于 2022-03-14 13:56:34
回答 3查看 4.3K关注 0票数 1

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

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

代码语言:javascript
复制
<?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只输出错误:

代码语言:javascript
复制
Warning: Required @OA\Info() not found
Warning: Required @OA\PathItem() not found
openapi: 3.0.0

然后我尝试了Swagger2,它运行得很好

我正在使用来自php8.1php:8.1-fpm-alpine停靠映像、最新的zircote/swagger-php包和Yii2框架

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-03-15 09:45:57

原来openapi不是从我的子文件夹中自动添加类。

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

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

您还必须将所有属性锚定在特定的类中,这样原始问题中的方法就无法工作;我的解决方案是创建一个已编译的路由器,每个路由都有一个具有php8.1属性的单独类。

票数 0
EN

Stack Overflow用户

发布于 2022-03-15 20:52:50

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

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

这里的主要思想是注释您的实际控制器(或在您的框架中称为它的任何东西),因此处理请求的代码与实际代码非常接近。

票数 1
EN

Stack Overflow用户

发布于 2022-11-21 18:43:26

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

添加基本控制器

代码语言:javascript
复制
<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

/**
 * @OA\Info(title="My First API", version="0.1")
 */
class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71468928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档