首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Laravel + Swagger中将属性和json响应结合起来?

如何在Laravel + Swagger中将属性和json响应结合起来?
EN

Stack Overflow用户
提问于 2022-04-26 15:47:20
回答 2查看 2.1K关注 0票数 0

我有一个使用Laravel作为api和swagger作为文档的项目。

在我的登录控制器中有这样的方法:

代码语言:javascript
运行
复制
/**
 * Handle an incoming authentication request.
 * 
 * 
 * @OA\Post(
 *     tags={"UnAuthorize"},
 *     path="/login",
 *     summary="User Login",
 *     @OA\RequestBody(
 *          @OA\MediaType(
 *              mediaType="application/json",
 *              @OA\Schema(
 *                  type="object",    
 *                  ref="#/components/schemas/LoginRequest",                  
 *              )
 *          )
 *     ),
 *     @OA\Response(
 *          response="200", 
 *          description="An example resource", 
 *          @OA\JsonContent(
 *              type="object", 
 *              @OA\Property(
 *                  format="string", 
 *                  default="20d338931e8d6bd9466edeba78ea7dce7c7bc01aa5cc5b4735691c50a2fe3228", 
 *                  description="token", 
 *                  property="token"
 *              )
 *          ),
 *         @OA\JsonContent(ref="#/components/schemas/UserResource")
 *     ),
 *     @OA\Response(response="401", description="fail"),
 * )
 *
 * @param  \App\Http\Requests\Auth\LoginRequest  $request
 * @return \Illuminate\Http\JsonResponse
 */
public function store(LoginRequest $request)
{                

    $request->authenticate();                
  
    return response()->json(
        [ 
           "token" => $request->user()->createToken($request->email)->plainTextToken,
           "user" => $request->user();  

        ]
    );
        
    
}

然后,当我运行以下命令: php l5-swagger:generate时,它将显示以下错误:

c:\myproject\vendor\zircote\swagger-php\src\Logger.php:40 36▕$this->log =函数( $entry,$type) { 37▕if ($entry instanceof Exception) { 38▕$entry= $entry->getMessage();39▕}➜40▕trigger_error($entry,$type);41▕};42▕}

当我移除这个

代码语言:javascript
运行
复制
@OA\JsonContent(ref="#/components/schemas/UserResource")

它可以工作,但是没有显示用户数据,也许我应该只返回令牌,然后使用令牌发出另一个请求,以获取有关日志用户的信息。我能做什么?谢谢

编辑:

代码语言:javascript
运行
复制
@OA\Response(
     *          response="200", 
     *          description="An example resource", 
     *          @OA\JsonContent(
     *              type="object", 
     *              @OA\Property(
     *                  format="string", 
     *                  default="20d338931e8d6bd9466edeba78ea7dce7c7bc01aa5cc5b4735691c50a2fe3228", 
     *                  description="token", 
     *                  property="token"
     *              ),
     *              @OA\Property(
     *                  format="application/json", 
     *                  property="user",
     *                  @OA\JsonContent(ref="#/components/schemas/UserResource") 
     *              )
     *          ),     
     *     )

我试过了,但它显示出错误

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-26 21:21:26

非常接近除了..。

使用“格式”代替“类型”( @OA\JsonContent

  • you )--如果您的属性已经被包装在中,则不必指定内容类型,需要小心处理剩余的尾随',';原则可以对挑剔。

这里是我的观点,它是独立工作的(除了缺少的@OA\Info):

代码语言:javascript
运行
复制
<?php

use OpenApi\Annotations\OpenApi as OA;

/**
 * @OA\Schema
 */
class LoginRequest{}

/**
 * @OA\Schema
 */
class UserResource{}

/**
 * Handle an incoming authentication request.
 *
 *
 * @OA\Post(
 *     tags={"UnAuthorize"},
 *     path="/login",
 *     summary="User Login",
 *     @OA\RequestBody(
 *          @OA\MediaType(
 *              mediaType="application/json",
 *              @OA\Schema(
 *                  type="object",
 *                  ref="#/components/schemas/LoginRequest"
 *              )
 *          )
 *     ),
 *     @OA\Response(
 *          response="200",
 *          description="An example resource",
 *          @OA\JsonContent(
 *              type="object",
 *              @OA\Property(
 *                  type="string",
 *                  default="20d338931e8d6bd9466edeba78ea7dce7c7bc01aa5cc5b4735691c50a2fe3228",
 *                  description="token",
 *                  property="token"
 *              ),
 *              @OA\Property(
 *                  property="user",
 *                  ref="#/components/schemas/UserResource"
 *              )
 *          )
 *     ),
 *     @OA\Response(response="401", description="fail")
 * )
 *
 */
class Controller {}
票数 1
EN

Stack Overflow用户

发布于 2022-04-26 16:26:33

您删除的JsonContent应该是我认为的第一个JsonContent上的属性

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72016886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档