У меня есть приложение REST Symfony 3.1, которое использует сериализованные объекты JSON от клиента, которые десериализуются обратно в объекты сущности в Symfony.form validation inested json object
Проблема у меня в том, что у User
есть внешний ключ для таблицы Status
. Когда я пытаюсь создать пользователя, я должен POST JSON в следующем формате:
{"firstname": "Jane", "lastname": "Doe", "status": "1"}
Однако, я хотел бы представить JSON в формате ниже вместо этого. Я хотел бы взять часть id
status
JSON в приведенном ниже примере, чтобы вставить в столбец внешнего ключа. Клиент, отправляющий запрос, уже имеет объекты с этим форматом и сериализует их, и отправка его таким образом будет чрезвычайно простой и простой в использовании.
{"firstname": "Jane", "lastname": "Doe", "status": {"id": 3, "type": "Pending"}
Я не знаю, с чего начать. Я думаю об трансформаторах данных, но я не совсем уверен, как заставить его принять формат JSON, который я хочу, а также проверить его в одно и то же время.
NewUserType.php
class NewUserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstname')
->add('lastname')
->add('status')
;
}
DefaultController.php
public function postNewUserAction(Request $Request)
{
$form = $this->createForm(NewUserType::class, new User());
$form->submit($Request->request->all());
...//validate and persist...
}
User.php
class User
{
/**
* @ORM\ManyToOne(targetEntity="Status")
* @ORM\JoinColumn(name="statusid", referencedColumnName="id")
*/
private $status;
Status.php
class Status
{
...
private $id
...
private $type;
Таблица Пользователь
mysql> select * from user;
+----+----------+-----------+----------+
| id | statusid | firstname | lastname |
+----+----------+-----------+-----------+
| 1 | 3 | Jane | Doe |
таблица Статус
id type
3 Pending
Является ли таблица состояния уже заполненной данными, а при вставке нового пользователя вы просто выбираете соответствующий статус для этого пользователя? –
@ MatkoĐipalo Да, таблица пользователя хранит только идентификатор из 'Status' в столбце' statusid'. Я просто добавил обзор таблицы в моем вопросе. – Tek