Я настроил сервер на основе API-платформы . Я автоматически создал несколько сущностей с помощью Symfony Maker-bundle и изменил их в соответствии со своими потребностями. Если я вызываю API с помощью POST-запроса, я получаю сообщение об ошибке Uncaught PHP Exception Symfony\Component\Serializer\Exception\NotNormalizableValueException: "Update is not allowed for this operation."
. Как я понимаю, таким образом не разрешается обновлять связанные объекты. Но это не то, что я намерен. Я просто хочу установить отношения
Что я делаю не так?
Ниже приведена упрощенная версия моей проблемы. Я исключил автоматически сгенерированные геттеры / сеттеры.
Сущности:
/**
* @ApiResource(
* normalizationContext={"groups"={"book"}},
* denormalizationContext={"groups"={"book"}}
* )
*/
class Book
{
/**
* @var integer
*
* @Groups({"book"})
*
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer", options={"unsigned"=true})
*/
private $id;
/**
* @var string
*
* @Groups({"book"})
*
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $name;
/**
* @var Language
*
* @Groups({"book"})
*
* @ORM\ManyToOne(targetEntity="App\Entity\Language", inversedBy="books")
* @ORM\JoinColumn(nullable=false)
*/
private $language;
}
/**
* @ApiResource(normalizationContext={"groups"={"language", "book"}})
*/
class Language
{
/**
* @var integer
*
* @Groups({"language", "book"})
*
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer", options={"unsigned"=true})
*/
private $id;
/**
* @var string
*
* @Groups({"language", "book"})
*
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @var Book
*
* @ORM\OneToMany(targetEntity="App\Entity\Book", mappedBy="language")
*/
private $books;
}
Если я отправлю следующий POST-запрос к API, чтобы создать Книгу с уже существует Язык
{
'name': 'some Name',
'language': {
'id': 234,
'name': "some languages name"
}
}
API отвечает с этой ошибкой
Uncaught PHP Exception Symfony\Component\Serializer\Exception\NotNormalizableValueException: "Update is not allowed for this operation."