I created the following class (simplified for the example) and using as @Model.
class Model
{
public string $name;
public function address(): string
{
return "$this->name@gmail.com";
}
public function isShort(): bool
{
return strlen($this->name) < 3;
}
}
The ApiDoc generator tries to interpret the functions as addSomething and isSomething so I obtain the model
{
"name": string,
"address": string,
"short": boolean
}
But I want only
{
"name": string
}
Is there a way to annotate the function to make them being ignored from the API doc renderer?
Use serialization groups for your entity for this purpose
1.In your controller, import
use OpenApi\Annotations as OA;
use Nelmio\ApiDocBundle\Annotation\Model;
2.Annotate your method with the desired model and serialization group. (In the example, this is the File:class
entity and the file:read
group)
/**
* @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 finally specify in your serialization group entity to tell the api which properties to use.
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. As we can see api doc ignores properties where the used serialization group is not set, in the example this property is extension
.
{
"filename": string
}