Наличие свойства того же класса в Symfony ApiPlatform - PullRequest
1 голос
/ 03 августа 2020

Я просмотрел ApiPlatform SymfonyCasts и до сих пор мне нравится то, что я могу с ней делать. Однако я столкнулся со следующим сценарием:

  • У меня есть класс Contract со свойством baseContract, которое указывает на объект, на котором должен быть основан новый объект. .

  • Оба denormalizationContext и normalizationContext установлены для всех полей (на данный момент) на contracts:write и contracts:read соответственно.

  • Когда от I go до /api, обе конечные точки GET и POST показывают все свойства, но пропускают baseContract ...

Есть какие-то проблемы?

Основная идея c состоит в том, что я хочу иметь возможность размещать что-то вроде этого:

{
  "name": "string",
  "description": "string",
  "contractNo": "string",
  "baseContract": "/api/contacts/{some_id}
}
    /**
     * @ORM\Entity(repositoryClass=ContractRepository::class)
     *
     * @ApiResource(
     *     normalizationContext={"groups": "contract:read"},
     *     denormalizationContext={"groups": "contract:write"},
     *     collectionOperations={
     *          "get",
     *          "post"
     *     },
     *     itemOperations={
     *          "get"
     *     }
     * )
     */
    class Contract
    {
......
        /**
         * @ORM\ManyToOne(targetEntity=Contract::class)
         * @ORM\JoinColumn()
         *
         * @Groups({"contract:read", "contract:write"})
         */
        private ?Contract $baseContract;

1 Ответ

2 голосов
/ 04 августа 2020

Я наконец проверил свой проект. Как вы сказали в комментариях, это действительно из-за рекурсии.

С этой конфигурацией групп сериализации вы встраиваете свое свойство baseContract.

Добавляете аннотацию @ ApiProperty (readableLink = false, WritableLink = false) в $ baseContract. Это предотвращает поведение встраивания, и чванство должно отображать ваше поле.

...