Symfony、NelmioApiDoc、Swagger、OpenApi:使用 jsonSerialized 模型注释 class
Symfony,NelmioApiDoc,Swagger,OpenApi: Annotate a class with jsonSerialized model
我创建了一个小例子:
class Response
{
/**
* @OA\Property(ref=@Model(type=EncodedModel::class))
*/
public RuntimeClass $filters;
}
class RuntimeClass implements JsonSerializable
{
public int $field;
public function jsonSerialize()
{
$model = new EncodedModel();
$model->field = "$this->field";
return $model;
}
}
class EncodedModel {
public string $field;
}
我有一个响应模型为 Response::class
的端点。
Response
class 有一个类型为 RuntimeClass
的字段 $filters 但是当 json 编码时,由于 JsonSerializable 实现的功能,它显示为 class EncodedModel
.
我的目标是在生成的 api 文档中获取字段 Response->filters 的类型 EncodedModel
而不是 RuntimeClass
.
我直接用 @OA\Property(ref=@Model(type=EncodedModel::class))
注释了这个字段,它确实有效,但我不太喜欢它。
正如我所见,这是一个 RuntimeClass
class 责任告诉 json 编码结果为 EncodedModel
class 而不是 RuntimeClass
class。否则每次我使用 RuntimeClass
作为模型字段时,我都必须记住对其进行注释。
我希望像这样注释 class 也能一劳永逸,但事实并非如此 :/
/**
* @Model(type=EncodedModel::class)
*/
class RuntimeClass implements JsonSerializable
...
有人知道这是否可行吗?
谢谢
------------------------编辑
对不起,我自己解决了,我正在解决,只是错误的注释:
/**
* @OA\Schema(ref=@Model(type=EncodedModel::class))
*/
class RuntimeClass implements JsonSerializable
...
还是谢谢你
对不起,我自己解决了,我正要解决,只是错误的注释:
/**
* @OA\Schema(ref=@Model(type=EncodedModel::class))
*/
class RuntimeClass implements JsonSerializable
...
我创建了一个小例子:
class Response
{
/**
* @OA\Property(ref=@Model(type=EncodedModel::class))
*/
public RuntimeClass $filters;
}
class RuntimeClass implements JsonSerializable
{
public int $field;
public function jsonSerialize()
{
$model = new EncodedModel();
$model->field = "$this->field";
return $model;
}
}
class EncodedModel {
public string $field;
}
我有一个响应模型为 Response::class
的端点。
Response
class 有一个类型为 RuntimeClass
的字段 $filters 但是当 json 编码时,由于 JsonSerializable 实现的功能,它显示为 class EncodedModel
.
我的目标是在生成的 api 文档中获取字段 Response->filters 的类型 EncodedModel
而不是 RuntimeClass
.
我直接用 @OA\Property(ref=@Model(type=EncodedModel::class))
注释了这个字段,它确实有效,但我不太喜欢它。
正如我所见,这是一个 RuntimeClass
class 责任告诉 json 编码结果为 EncodedModel
class 而不是 RuntimeClass
class。否则每次我使用 RuntimeClass
作为模型字段时,我都必须记住对其进行注释。
我希望像这样注释 class 也能一劳永逸,但事实并非如此 :/
/**
* @Model(type=EncodedModel::class)
*/
class RuntimeClass implements JsonSerializable
...
有人知道这是否可行吗?
谢谢
------------------------编辑
对不起,我自己解决了,我正在解决,只是错误的注释:
/**
* @OA\Schema(ref=@Model(type=EncodedModel::class))
*/
class RuntimeClass implements JsonSerializable
...
还是谢谢你
对不起,我自己解决了,我正要解决,只是错误的注释:
/**
* @OA\Schema(ref=@Model(type=EncodedModel::class))
*/
class RuntimeClass implements JsonSerializable
...