API 资源创建平台相关实体
API Platform related entities on resource creation
有没有办法在实体创建资源上传递已创建的相关实体的 ID 数组?默认文档说关于根据 post 请求创建所有内容。
一些数据。
我有 Squad
个实体:
/**
* @ApiResource(iri="http://schema.org/Squad")
* @ORM\Table(name="squads")
* @ORM\Entity()
*/
class Squad
{
use IdentityAutoStrategy, Timestamps;
/**
* @var string
* @ORM\Column(type="string", length=25, unique=true)
*/
private $name;
/**
* @var Collection|User[]|null
* @ORM\OneToMany(targetEntity="User", mappedBy="squad")
* @ApiProperty(
* attributes={
* "swagger_context"={
* "$ref"="#/definitions/User",
* }
* }
* )
* @ApiSubresource(max_depth=1)
*/
private $users;
和User
实体:
/**
* @ApiResource()
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="GPL\Repository\UserRepository")
*/
class User implements UserInterface, Serializable
{
use Timestamps, IdentityAutoStrategy;
/**
* @ORM\Column(type="string", length=25, unique=true)
*/
private $username;
/**
* @ORM\Column(type="string", length=64)
*/
private $password;
/**
* @ORM\Column(type="string", length=254, unique=true)
*/
private $email;
/**
* @ORM\Column(name="is_active", type="boolean")
*/
private $isActive;
/**
* @var Squad
* @ORM\ManyToOne(targetEntity="Squad", inversedBy="users")
* @ORM\JoinColumn(name="squad_id", referencedColumnName="id")
* @ApiProperty(
* attributes={
* "swagger_context"={
* "$ref"="#/definitions/Squad",
* }
* }
* )
*/
private $squad;
我想要实现的主要目标是发送 POST /api/squads
和 "users": [1,2,3]
,其中 1、2、3 是现有用户的 ID,并将它们链接到创建的 Squad
实体。使用 api-platform 中的一些默认注释是否可用?或者我该怎么做?
对于 JSON-LD,您可以像这样使用 IRI:
users: ["users/1", "users/2"]
请记住,如果您在用户资源中禁用 GET 项目操作,这将不起作用。
您还可以强制执行此操作并禁用嵌入数据,以通过排除所有用户字段组来防止您的客户创建新用户。
/**
* @ApiResource(attributes={
* "normalization_context"={"groups"={"squad", "squad:user", "user"}},
* "denormalization_context"={"groups"={"squad", "squad:user"}}
* })
*/
class Squad
{
...
/**
* ...
* @Groups("squad")
*/
private $name;
/**
* ...
* @Groups("squad:user")
*/
private $users;
...
class User
{
/**
* ...
* @Groups("user")
*/
private $username;
...
有没有办法在实体创建资源上传递已创建的相关实体的 ID 数组?默认文档说关于根据 post 请求创建所有内容。
一些数据。
我有 Squad
个实体:
/**
* @ApiResource(iri="http://schema.org/Squad")
* @ORM\Table(name="squads")
* @ORM\Entity()
*/
class Squad
{
use IdentityAutoStrategy, Timestamps;
/**
* @var string
* @ORM\Column(type="string", length=25, unique=true)
*/
private $name;
/**
* @var Collection|User[]|null
* @ORM\OneToMany(targetEntity="User", mappedBy="squad")
* @ApiProperty(
* attributes={
* "swagger_context"={
* "$ref"="#/definitions/User",
* }
* }
* )
* @ApiSubresource(max_depth=1)
*/
private $users;
和User
实体:
/**
* @ApiResource()
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="GPL\Repository\UserRepository")
*/
class User implements UserInterface, Serializable
{
use Timestamps, IdentityAutoStrategy;
/**
* @ORM\Column(type="string", length=25, unique=true)
*/
private $username;
/**
* @ORM\Column(type="string", length=64)
*/
private $password;
/**
* @ORM\Column(type="string", length=254, unique=true)
*/
private $email;
/**
* @ORM\Column(name="is_active", type="boolean")
*/
private $isActive;
/**
* @var Squad
* @ORM\ManyToOne(targetEntity="Squad", inversedBy="users")
* @ORM\JoinColumn(name="squad_id", referencedColumnName="id")
* @ApiProperty(
* attributes={
* "swagger_context"={
* "$ref"="#/definitions/Squad",
* }
* }
* )
*/
private $squad;
我想要实现的主要目标是发送 POST /api/squads
和 "users": [1,2,3]
,其中 1、2、3 是现有用户的 ID,并将它们链接到创建的 Squad
实体。使用 api-platform 中的一些默认注释是否可用?或者我该怎么做?
对于 JSON-LD,您可以像这样使用 IRI:
users: ["users/1", "users/2"]
请记住,如果您在用户资源中禁用 GET 项目操作,这将不起作用。
您还可以强制执行此操作并禁用嵌入数据,以通过排除所有用户字段组来防止您的客户创建新用户。
/**
* @ApiResource(attributes={
* "normalization_context"={"groups"={"squad", "squad:user", "user"}},
* "denormalization_context"={"groups"={"squad", "squad:user"}}
* })
*/
class Squad
{
...
/**
* ...
* @Groups("squad")
*/
private $name;
/**
* ...
* @Groups("squad:user")
*/
private $users;
...
class User
{
/**
* ...
* @Groups("user")
*/
private $username;
...