PHP Symfony NelmioApiDocBundle 忽略模型中的方法 class
PHP Symfony NelmioApiDocBundle ignore methods in model class
我创建了以下 class(针对示例进行了简化)并用作 @Model。
class Model
{
public string $name;
public function address(): string
{
return "$this->name@gmail.com";
}
public function isShort(): bool
{
return strlen($this->name) < 3;
}
}
ApiDoc 生成器尝试将函数解释为 addSomething 和 isSomething,因此我获得了模型
{
"name": string,
"address": string,
"short": boolean
}
但我只想要
{
"name": string
}
有没有办法注释函数,使它们在 API 文档渲染器中被忽略?
为此目的,为您的实体使用序列化组
1.In你的控制器,导入
use OpenApi\Annotations as OA;
use Nelmio\ApiDocBundle\Annotation\Model;
2.Annotate 您的方法与所需的模型和序列化组。 (在示例中,这是 File:class
实体和 file:read
组)
/**
* @Route("/api/files", methods={"GET"})
* @OA\Response(
* response=200,
* description="Returns the Files",
* @OA\JsonContent(
* type="array",
* @OA\Items(ref=@Model(type=File::class, groups={"file:read"}))
* )
* )
* @OA\Tag(name="files")
*/
public function getFiles(){
//...
}
3.And 最后在您的序列化组实体中指定以告诉 api 要使用哪些属性。
class File
{
/**
* @Groups({"file:read"})
* @ORM\Column(name="filename", type="string")
*/
private string $filename;
/**
* @ORM\Column(name="extension", type="string")
*/
private string $extension;
}
4.Result。正如我们所见,api 文档忽略了未设置使用的序列化组的属性,在示例中,此 属性 是 extension
.
{
"filename": string
}
我创建了以下 class(针对示例进行了简化)并用作 @Model。
class Model
{
public string $name;
public function address(): string
{
return "$this->name@gmail.com";
}
public function isShort(): bool
{
return strlen($this->name) < 3;
}
}
ApiDoc 生成器尝试将函数解释为 addSomething 和 isSomething,因此我获得了模型
{
"name": string,
"address": string,
"short": boolean
}
但我只想要
{
"name": string
}
有没有办法注释函数,使它们在 API 文档渲染器中被忽略?
为此目的,为您的实体使用序列化组
1.In你的控制器,导入
use OpenApi\Annotations as OA;
use Nelmio\ApiDocBundle\Annotation\Model;
2.Annotate 您的方法与所需的模型和序列化组。 (在示例中,这是 File:class
实体和 file:read
组)
/**
* @Route("/api/files", methods={"GET"})
* @OA\Response(
* response=200,
* description="Returns the Files",
* @OA\JsonContent(
* type="array",
* @OA\Items(ref=@Model(type=File::class, groups={"file:read"}))
* )
* )
* @OA\Tag(name="files")
*/
public function getFiles(){
//...
}
3.And 最后在您的序列化组实体中指定以告诉 api 要使用哪些属性。
class File
{
/**
* @Groups({"file:read"})
* @ORM\Column(name="filename", type="string")
*/
private string $filename;
/**
* @ORM\Column(name="extension", type="string")
*/
private string $extension;
}
4.Result。正如我们所见,api 文档忽略了未设置使用的序列化组的属性,在示例中,此 属性 是 extension
.
{
"filename": string
}