API 平台自定义 getter 实体属性的名称
API Platform custom getter name for Entity attributes
我有一个要映射到 Api 平台资源的 Doctrine 实体:
/**
* @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的相应资源上正常显示:
我现在要做的是对所有属性使用不带 get 前缀的自定义 getter 名称:
public function uuid(): string;
public function title(): string;
public function createdAt(): string;
但是我的 API 平台页面上没有显示这些字段。我如何配置 API Platform/Doctrine/Symfony 或其他什么以便我可以为我的 getter 使用自定义名称?
通过更改这些方法名称,Symfony 的 属性 访问不会将它们识别为实际的 getter,并且会被序列化程序忽略,可以使用序列化组公开它们。
/**
* @ApiResource(
* normalizationContext={"groups"={"book"}}
* )
*/
class Book
{
/**
* @Groups("book")
*/
public function uuid(): string
{
//...
}
}
但是,您的方法不会被视为 getter,因此它可能会导致序列化程序或 Api 平台出现一些异常情况。这是一个标准约定,最好不要更改它们。在幕后,这是由 Symfony 的 property access 组件处理的。
我有一个要映射到 Api 平台资源的 Doctrine 实体:
/**
* @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的相应资源上正常显示:
我现在要做的是对所有属性使用不带 get 前缀的自定义 getter 名称:
public function uuid(): string;
public function title(): string;
public function createdAt(): string;
但是我的 API 平台页面上没有显示这些字段。我如何配置 API Platform/Doctrine/Symfony 或其他什么以便我可以为我的 getter 使用自定义名称?
通过更改这些方法名称,Symfony 的 属性 访问不会将它们识别为实际的 getter,并且会被序列化程序忽略,可以使用序列化组公开它们。
/**
* @ApiResource(
* normalizationContext={"groups"={"book"}}
* )
*/
class Book
{
/**
* @Groups("book")
*/
public function uuid(): string
{
//...
}
}
但是,您的方法不会被视为 getter,因此它可能会导致序列化程序或 Api 平台出现一些异常情况。这是一个标准约定,最好不要更改它们。在幕后,这是由 Symfony 的 property access 组件处理的。