简体   繁体   中英

API REST php7 symfony 3.4 - Databind json to forms

I found this: "How to process nested json with FOSRestBundle and Symfony forms" but the acepted reply was: "making an unmapped form and binding data manually using a form event"

In play , you can write your own data binder but for most formats( xml , json , ...), you can take the data automatically based on the Content-Type http header (the @BodyParser.Of(BodyParser.Json.class) is not mandatory here to get it working), there are some well know data binders available(from Spring or wherever). A product can have a list of items , and even so, you can bind the request body to a form automatically .

PHP/Symfony no learn yet how to solve this issue? If I create an API REST in php + symfonmy I need to write some kind of "parser" like this ? Can some one share a link to a post or an example with a solution to this?

PD: I use the play example because I am not an experienced web developer(less in PHP), so take this like my mcve.

Thanks in advance.

To solve this issue be sure all field on the form that have a relation are defined explicit:

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

The code above will not work because the field 'field_entity' will be take like another simple field, you will have to define all the fields of entities or at lest the fields of interest, example:

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

Best Regards...

By my experience you can achieve this by two ways:

  1. Deserializing the JSON into a entity
  2. Handling the request with a form as you suggest

In my projects I always do it with the second method because it to much easy to update the entities from a database loaded entity and handle the validation of your data.

I let you a link that is in a old version but remain more or less the same knp university

I hope this can help you

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM