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;
...