Swagger - "Warning: Required @OA\Info() not found"。

回答 3 浏览 4424 2022-03-14

我刚刚接触到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,它工作得很好。

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

ddruganov 提问于2022-03-14
3 个回答
#1楼
得票数 1

另外,你也可以在openapi命令中添加-b ./vendor/autoload.php来为swagger-php设置自动加载。

不管怎么说,我很惊讶这在swagger-php v4中是可行的,因为它要求注释锚定在一个结构元素上(类、接口等)。

这里的主要想法是注释你的实际控制器(或在你的框架中叫什么),所以处理一个请求的代码,所以文档是接近实际代码的。

DerManoMann 提问于2022-03-15
是的,对不起,忘记说了,我创建了一个编译的路由器,将所有的路由锚定在特定的类上;另外,普通的-b autoload.php在yii2中不能工作,因为yii2在初始化时加载项目的类,所以你需要运行一个控制台应用程序。ddruganov 2022-03-16
#2楼 已采纳
得票数 0

事实证明,openapi没有从我的子文件夹中自动加载类。

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

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

你还必须将所有的属性锚定在特定的类上,所以原问题中的方法是行不通的;我的解决方案是创建一个编译的路由器,每个路由都有一个单独的类,并带有php8.1属性。

ddruganov 提问于2022-03-15
ddruganov 修改于2022-03-16
#3楼
得票数 0

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

在你的基础控制器中加入

<?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;
}
Firdavs 提问于2022-11-21