API REST php7 symfony 3.4 — привязка JSON к формам

Я нашел это: «Как обрабатывать вложенные json с помощью форм FOSRestBundle и Symfony» но я получил ответ: «Создание не отображенной формы и привязка данных вручную с помощью события формы»

В играть, ты можешь написать ваше собственное хранилище данных но для большинства форматов (xml, json, …), вы можете взять данные автоматически на основе Content-Type http заголовок ( @BodyParser.Of(BodyParser.Json.class) не является обязательным Вот чтобы это работало), есть некоторые хорошо известные средства связывания данных (из Spring или где-либо еще). Товар может иметь список товаров, и даже так, вы можете привязать тело запроса к форме автоматически.

PHP / Symfony пока не узнать, как решить эту проблему?
Если я создаю API REST в php + symfonmy, мне нужно написать что-то вроде парсера этот?
Может кто-нибудь поделиться ссылкой на сообщение или пример с решением этой проблемы?

PD: я использую пример игры, потому что я не опытный веб-разработчик (реже в PHP), поэтому примите это как мой mcve.

Заранее спасибо.

0

Решение

Чтобы решить эту проблему, убедитесь, что все поля в форме, имеющие отношение, определены явно:

$builder->add('field_simple')
->add('field_entity')
...

Приведенный выше код не будет работать, потому что поле ‘field_entity’ будет выглядеть как другое простое поле, вам придется определить все поля сущностей или, по крайней мере, поля интереса, например:

$builder->add('field_simple')
->add('field_entity', EntityType::class, array(
'class' => CustomEntity::class,
...
))
...

С уважением…

1

Другие решения

По моему опыту вы можете достичь этого двумя способами:

  1. Десериализация JSON в сущность
  2. Обработка запроса с формой, как вы предлагаете

В моих проектах я всегда делаю это вторым методом, потому что гораздо проще обновлять сущности из загруженной в базу данных сущности и обрабатывать проверку ваших данных.

Я дам вам ссылку, которая находится в старой версии, но остается более или менее прежней университет университета

Я надеюсь это тебе поможет

0