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框架。
3 个回答
#1楼
得票数 1
另外,你也可以在openapi
命令中添加-b ./vendor/autoload.php
来为swagger-php设置自动加载。
不管怎么说,我很惊讶这在swagger-php v4中是可行的,因为它要求注释锚定在一个结构元素上(类、接口等)。
这里的主要想法是注释你的实际控制器(或在你的框架中叫什么),所以处理一个请求的代码,所以文档是接近实际代码的。
是的,对不起,忘记说了,我创建了一个编译的路由器,将所有的路由锚定在特定的类上;另外,普通的
-b autoload.php
在yii2中不能工作,因为yii2在初始化时加载项目的类,所以你需要运行一个控制台应用程序。
- ddruganov 2022-03-16
#2楼
已采纳
得票数 0
事实证明,openapi没有从我的子文件夹中自动加载类。
解决方案非常简单:从控制台应用程序内部生成文档(例如,我有一个php yii open-api/generate-docs
的命令)。
这样,composer和yii2就会加载swagger所需的所有类。
你还必须将所有的属性锚定在特定的类上,所以原问题中的方法是行不通的;我的解决方案是创建一个编译的路由器,每个路由都有一个单独的类,并带有php8.1属性。
#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;
}