如何在 Laravel + Swagger 中组合 属性 和 json 响应?
How to combine a property and json response in Laravel + Swagger?
我有一个项目使用 Laravel 作为 api 并使用 swagger 作为文档
我的登录控制器中有这个方法:
/**
* 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 artisan l5-swagger:generate 时,它显示这个错误:
c:\myproject\vendor\zircote\swagger-php\src\Logger.php:40
36▕ $this->log = function ($entry, $type) {
37▕ if ($entry instanceof Exception) {
38▕ $entry = $entry->getMessage();
39▕ } ➜ 40▕ trigger_error($entry, $type);
41▕ };
42▕ }
当我删除它时
@OA\JsonContent(ref="#/components/schemas/UserResource")
它有效,但没有显示用户数据,也许我应该只 return 令牌,然后使用令牌发出另一个请求以获取有关已登录用户的信息。我能做什么?,谢谢
编辑:
@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")
* )
* ),
* )
我试过了,但显示错误
你删除的 JsonContent 应该是 属性 我认为第一个 JsonContent
非常接近,除了...
- 使用 'format' 而不是 'type'
- 如果您的 属性 已经包含在
@OA\JsonContent
中,则您不必指定内容类型
- 你需要小心多余的尾随 ',';学说可以挑剔
这是我的作品 stand-alone(缺失的 @OA\Info
除外):
<?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 {}
我有一个项目使用 Laravel 作为 api 并使用 swagger 作为文档
我的登录控制器中有这个方法:
/**
* 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 artisan l5-swagger:generate 时,它显示这个错误:
c:\myproject\vendor\zircote\swagger-php\src\Logger.php:40 36▕ $this->log = function ($entry, $type) { 37▕ if ($entry instanceof Exception) { 38▕ $entry = $entry->getMessage(); 39▕ } ➜ 40▕ trigger_error($entry, $type); 41▕ }; 42▕ }
当我删除它时
@OA\JsonContent(ref="#/components/schemas/UserResource")
它有效,但没有显示用户数据,也许我应该只 return 令牌,然后使用令牌发出另一个请求以获取有关已登录用户的信息。我能做什么?,谢谢
编辑:
@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")
* )
* ),
* )
我试过了,但显示错误
你删除的 JsonContent 应该是 属性 我认为第一个 JsonContent
非常接近,除了...
- 使用 'format' 而不是 'type'
- 如果您的 属性 已经包含在
@OA\JsonContent
中,则您不必指定内容类型
- 你需要小心多余的尾随 ',';学说可以挑剔
这是我的作品 stand-alone(缺失的 @OA\Info
除外):
<?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 {}