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
}