Объекты, связанные с платформой API при создании ресурса - PullRequest
0 голосов
/ 08 мая 2018

Есть ли способ передачи массива идентификаторов уже созданных связанных сущностей на ресурс создания сущностей? Документы по умолчанию говорят о создании всего по запросу. Некоторые данные. У меня есть 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 - это идентификатор существующих пользователей и связать их с созданной Squad сущностью. Это доступно с использованием некоторых аннотаций по умолчанию от api-платформы? Или как я могу это сделать?

1 Ответ

0 голосов
/ 08 мая 2018

Для 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;
...
...