API REST php7 symfony 3.4 - Привязка данных json к формам

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

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

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

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

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


person Alvaro Denis Acosta    schedule 23.03.2018    source источник


Ответы (2)


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

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

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

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

С уважением...

person ejromero    schedule 23.03.2018

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

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

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

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

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

person Jose M. González    schedule 23.03.2018
comment
Я пробовал это, но не работает, когда у меня есть вложенный json :(. - person Alvaro Denis Acosta; 23.03.2018
comment
Я полагаю, что это были связанные сущности, вы можете добиться этого с помощью типа коллекции, я могу сделать с такими формами, symfony.com/doc/current/reference/forms/types/collection.html - person Jose M. González; 23.03.2018