Php 实体属性的API平台自定义getter名称
我有一个要映射到Api平台资源的条令实体: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
/**
* @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通常使用方法进行分组,我认为这是因为您的属性和方法使用相同的名称?