无法在l5-swagger中生成API文档

12

我开始学习Swagger。

我试图完成书籍“使用Angular 6和Laravel 5进行全栈Web开发”中的相同操作。

在输入命令“php artisan l5-swagger:generate”后,使用php-fpm bash时,在VS Code终端中出现了以下异常:

root@8e6435be9103:/application# php artisan l5-swagger:generate
Regenerating docs
 
ErrorException  : Required @OA\Info() not found
at /application/vendor/zircote/swagger-php/src/Logger.php:39
   35|         $this->log = function ($entry, $type) {
   36|             if ($entry instanceof Exception) {
   37|                 $entry = $entry->getMessage();
 > 39|             trigger_error($entry, $type);
   40|         };
   41|     }
   42|
   43|     /**
 
Exception trace:
 
1   trigger_error("Required @OA\Info() not found")
    /application/vendor/zircote/swagger-php/src/Logger.php:39
 
2   OpenApi\Logger::OpenApi\{closure}("Required @OA\Info() not found")
    /application/vendor/zircote/swagger-php/src/Logger.php:71

当我尝试打开http://localhost:8081/api/documentation时,它会出现以下错误:

Failed to load API definition.
Fetch errorNot Found http://localhost:8081/docs/api-docs.json

我在docker内使用php-fpm bash。我的操作系统是Ubuntu 18.04.3 LTS。

有人可以帮我解决这个问题吗?谢谢!


你的操作注释存在错误。在执行操作之前,你编写的代码应该是相同的 * @OA\Get( - hamed hossani
2个回答

34

在运行php artisan l5-swagger:generate之前,您需要在代码中加入一些注释。首先,进入app/Http/Controllers/Controller.php文件,并在类声明之前添加如下的phpdoc注释块:

/**
 * @OA\Info(title="My First API", version="0.1")
 */

仅仅使用这个注释就足以解决你所描述的问题,但如果你再次执行php artisan l5-swagger:generate,你将看到以下异常:

 ErrorException  : Required @OA\PathItem() not found

  at /home/nathanael/dev/laravel-projects/laravel-swagger/vendor/zircote/swagger-php/src/Logger.php:39
    35|         $this->log = function ($entry, $type) {
    36|             if ($entry instanceof Exception) {
    37|                 $entry = $entry->getMessage();
    38|             }
  > 39|             trigger_error($entry, $type);
    40|         };
    41|     }
    42| 
    43|     /**

  Exception trace:

  1   trigger_error("Required @OA\PathItem() not found")
      /home/nathanael/dev/laravel-projects/laravel-swagger/vendor/zircote/swagger-php/src/Logger.php:39

  2   OpenApi\Logger::OpenApi\{closure}("Required @OA\PathItem() not found")
      /home/nathanael/dev/laravel-projects/laravel-swagger/vendor/zircote/swagger-php/src/Logger.php:71

  Please use the argument -v to see more details.

那是因为你必须在控制器中至少有一个被注解描述路由的方法。您可以轻松地在应用程序中创建资源来测试运行 php artisan make:controller ProjectsController -r 并将 Route::resource('projects', 'ProjectsController') 添加到 routes/web.php 中。 创建控制器后,打开它并在索引方法之前添加以下 phpdoc 注释块,例如:

/**
 * @OA\Get(
 *     path="/projects",
 *     @OA\Response(response="200", description="Display a listing of projects.")
 * )
 */

然后再次运行php artisan l5-swagger:generate,您必须在终端中看到一个成功的消息。


0

1
根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接