【问题标题】:Required @SWG\Info() not found未找到必需的 @SWG\Info()
【发布时间】:2015-10-01 09:42:48
【问题描述】:

我对使用 Swagger 还是很陌生。因为我的项目是使用 Laravel,所以我使用 Swaggerevel 来记录我的 API。在我尝试生成如下,

./vendor/bin/swagger app/ -o storage/docs/api-docs.json

说明

[INFO] Required @SWG\Info() not found

    get /api/resource.json
-----------------------
1 operations documented
-----------------------
Written to /home/admin/api/gevme-api/storage/docs/api-docs.json

当我尝试访问时,它localhost:8000/docs,它正确显示了我生成的 json api。但是当我尝试访问localhost:8000/api-docs 时,再次显示相同的错误消息。

ErrorException in Logger.php line 38:
Required @SWG\Info() not found
in Logger.php line 38
at HandleExceptions->handleError('1024', 'Required @SWG\Info() not found', '/home/admin/api/gevme-api/vendor/zircote/swagger-php/src/Logger.php', '38', array('entry' => 'Required @SWG\Info() not found', 'type' => '1024'))
at trigger_error('Required @SWG\Info() not found', '1024') in Logger.php line 38
at Logger->Swagger\{closure}('Required @SWG\Info() not found', '1024')
at call_user_func(object(Closure), 'Required @SWG\Info() not found', '1024') in Logger.php line 68
at Logger::notice('Required @SWG\Info() not found') in AbstractAnnotation.php line 365
at AbstractAnnotation->validate() in Analysis.php line 284
at Analysis->validate() in functions.php line 46
at Swagger\scan('/home/admin/api/gevme-api/modules/Api', array('exclude' => array('/home/admin/api/gevme-api/storage', '/home/admin/api/gevme-api/tests', '/home/admin/api/gevme-api/resources/views', '/home/admin/api/gevme-api/config', '/home/admin/api/gevme-api/vendor'))) in routes.php line 39
at SwaggervelServiceProvider->{closure}()
at call_user_func_array(object(Closure), array()) in Route.php line 155
at Route->runCallable(object(Request)) in Route.php line 130
at Route->run(object(Request)) in Router.php line 704
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Router.php line 706
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 671
at Router->dispatchToRoute(object(Request)) in Router.php line 631
at Router->dispatch(object(Request)) in Kernel.php line 236
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in OAuthExceptionHandlerMiddleware.php line 36
at OAuthExceptionHandlerMiddleware->handle(object(Request), object(Closure))
at call_user_func_array(array(object(OAuthExceptionHandlerMiddleware), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 122
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87
at Kernel->handle(object(Request)) in index.php line 54
at require_once('/home/admin/api/gevme-api/public/index.php') in server.php line 21

【问题讨论】:

    标签: php swagger laravel-5.1


    【解决方案1】:

    问题是 - 您缺少 @SWG\Info 块。 它是一个块,它告诉 swagger 关于你的 API 的一些最常见的信息。

    我通常将它放在一个单独的控制器中,该控制器正在渲染 swagger JSON。 这是一个例子:

    /**
     * @SWG\Swagger(
     *     schemes={"http","https"},
     *     host="api.host.com",
     *     basePath="/",
     *     @SWG\Info(
     *         version="1.0.0",
     *         title="This is my website cool API",
     *         description="Api description...",
     *         termsOfService="",
     *         @SWG\Contact(
     *             email="contact@mysite.com"
     *         ),
     *         @SWG\License(
     *             name="Private License",
     *             url="URL to the license"
     *         )
     *     ),
     *     @SWG\ExternalDocumentation(
     *         description="Find out more about my website",
     *         url="http..."
     *     )
     * )
     */
    
    class SwaggerController extends...
    

    【讨论】:

    • 我遇到了同样的错误,但是 Lumen 框架使用了 DarkaOnLine/SwaggerLume。我在哪里可以找到这个文件来编辑它?
    • 无论您将 Swagger 文档放在何处。您通常需要手动创建它。我不知道 Lumen。
    • @AhmedZelfani 你发现你是怎么解决这个问题的?
    • @AhmedZelfani @user269867 您可以像上面的 Mathew 在您的 app/Http/Controllers 目录中创建一个简单的控制器。
    【解决方案2】:

    如果您遇到这种情况,并且您在控制器等中有 Swagger 定义但仍然没有看到 cmets,请确保您的 opcache 配置中没有以下设置:

    opcache.save_comments=1
    opcache.load_comments=1
    

    上述设置删除和不加载 swagger 创建文档所需的 docblox。

    【讨论】:

    • 什么?你确定吗?
    【解决方案3】:

    我为 Laravel 5.6 推出

    composer require darkaonline/l5-swagger:5.6
    

    然后悄悄地安装了 5.6.0 版(链接到 zircote/swagger-php 版本 TWO),我得到了主题错误,甚至在 Controller 中有 @OA\Info 块。

    当我跑步时

    composer require darkaonline/l5-swagger:5.6.9
    

    并将 zircote/swagger-php 的版本增加到

    composer require zircote/swagger-php:3.0.2
    

    我的问题解决了

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 1970-01-01
      • 2013-04-16
      • 2016-08-28
      • 2012-03-03
      • 2015-10-26
      • 2018-12-05
      • 2017-08-09
      • 2013-05-05
      相关资源
      最近更新 更多