API Platform에서 속성이 응답에 포함되지 않을 때의 조치

5583 단어 심포니API-Platform

업데이트 정보



2020/09/09 gettersetter 모두에 형식 정보가 없으면 POST 매개 변수에 표시되지 않는 현상을 확인했습니다.

소개



API Platform을 사용하고 있고 약간 빠진 부분의 비망록

문제



이하와 같은 설정을 실시하고 있을 때, Book 자원을 취득했을 때의 응답에 isPublished 가 포함되지 않는다.
/**
 * @ApiResource(
 *     normalizationContext={"groups"={"book:read"}},
 *     denormalizationContext={"groups"={"book:write"}},
 *     collectionOperations={
 *          "get"={},
 *          "post"={},
 *     },
 *     itemOperations={
 *          "get"={},
 *          "delete"={},
 *     },
 * )
 *
 * @ORM\Entity(repositoryClass=UserRepository::class)
 */
class Book
{
...
    /**
     * @Groups({"book:read"})
     */
    private $isPublished = false;
...
}


원인



Getter의 이름이 속성 이름과 어긋났습니다. 아무래도 API Platform에서는 isPublished 에 대한 Getter는 getIsPublished 이어야 하는 모양. 아래와 같이 수정하는 것으로 무사히 응답에 isPublished 가 포함되었습니다. (어느 쪽이라도 Symfony의 시리얼 라이저 사양?)

Phpstorm을 사용하고 있어, cmd + n 로부터 Getter를 살리면, is〇〇 계는 디폴트로 get가 생략되기 때문에 빠져 버렸습니다....
Phpstorm을 사용하는 분은 주의를.

class Book
{
...
    public function isPublished()
    {
        return $this->isPublished;
    }
...
}



class Book
{
...
    public function getIsPublished()
    {
        return $this->isPublished;
    }
...
}

getter/setter에 형이 없는 경우



getter 또는 setter 중 하나에 형식 정보가 있으면 좋은 모양.

유형 정보 없음



User.php

...
    /**
     * @Groups({"user:write"})
     */
    private $plainPassword;


    public function getPlainPassword()
    {
        return $this->plainPassword;
    }

    public function setPlainPassword($plainPassword): self
    {
        $this->plainPassword = $plainPassword;

        return $this;
    }
...





유형 정보 있음



User.php

...
    /**
     * @Groups({"user:write"})
     */
    private $plainPassword;

    public function getPlainPassword(): ?string
    {
        return $this->plainPassword;
    }

    public function setPlainPassword(?string $plainPassword): self
    {
        $this->plainPassword = $plainPassword;

        return $this;
    }
...


좋은 웹페이지 즐겨찾기