我开始学习招摇。我正在尝试做与《用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。
任何人都可以帮助我解决此问题。 谢谢!!!
答案 0 :(得分:0)
在运行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
。
创建控制器后,将其打开,并在index方法之前添加以下phpdoc注释块,例如:
/**
* @OA\Get(
* path="/projects",
* @OA\Response(response="200", description="Display a listing of projects.")
* )
*/
然后,再次运行php artisan l5-swagger:generate
,您必须在终端上看到成功消息。