Php 实体属性的API平台自定义getter名称

Php 实体属性的API平台自定义getter名称,php,symfony,doctrine-orm,api-platform.com,Php,Symfony,Doctrine Orm,Api Platform.com,我有一个要映射到Api平台资源的条令实体: /** * @ApiResource * @ORM\Entity */ class Book { /** * @ORM\Id * @ORM\Column(type="uuid", unique=true) */ private UuidInterface $uuid; /** * @var string * @ORM\Column * @As

我有一个要映射到Api平台资源的条令实体:

/**
 * @ApiResource
 * @ORM\Entity
 */
class Book
{
    /**
     * @ORM\Id
     * @ORM\Column(type="uuid", unique=true)
     */
    private UuidInterface $uuid;

    /**
     * @var string
     * @ORM\Column
     * @Assert\NotBlank
     */
    private string $title;

    /**
     * @ORM\Column(type="datetime")
     */
    private DateTimeInterface $createdAt;

    public function __construct(UuidInterface $uuid, string $title, DateTimeInterface $createdAt)
    {
        $this->uuid = $uuid;
        $this->title = $title;
        $this->createdAt = $createdAt;
    }

    public function getUuid(): string
    {
        return $this->uuid->toString();
    }

    public function getTitle(): string
    {
        return $this->title;
    }

    public function getCreatedAt(): string
    {
        return $this->createdAt->format('Y-m-d H:i:s');
    }
}
它正确地显示在我的api的相应资源上:

我现在要做的是为所有属性使用一个自定义getter名称,而不使用get前缀:

    public function uuid(): string;
    public function title(): string;
    public function createdAt(): string;

但是这些字段不会显示在我的API平台页面上。我如何配置API平台/Doctrine/Symfony或其他什么,以便为我的getter使用自定义名称?

通过更改这些方法名称,Symfony的属性访问将无法识别它们为实际的getter,并将由序列化程序执行,可以使用序列化组公开它们

/**
 * @ApiResource(
 *     normalizationContext={"groups"={"book"}}
 * )
 */
class Book
{

    /**
    * @Groups("book")
    */
    public function uuid(): string
    {
       //...
    }

}

但是,您的方法不会被视为getter,因此它可能会导致序列化程序或Api平台出现一些奇怪的情况。这是一个标准惯例,最好不要改变它们。在幕后,这是由Symfony的组件处理的。

实际上,您的解决方案对我不起作用:
无法添加“AdventureBook\Domain\Book\Book::uuid”上的组。只能在以“get”、“is”、“has”或“set”开头的方法上添加组。
但是,此错误消息以及您的回答说服我坚持标准getter命名。因此被标记为已接受。谢谢。@Mochilo通常使用方法进行分组,我认为这是因为您的属性和方法使用相同的名称?