JMS десериализует JSON и подходит для класса модели

Прежде всего, извините за мой английский.. Я постараюсь выразить лучше.

Я создаю API Rest в Symfony 2.7 с помощью JMSSerializerBundle. Я получил модель Customer с разделенными свойствами адреса: (line1, line2, city, postal_code, state, country_code), когда я отправляю ответ, я делаю это:

{
"company_name": "Foograde",
"first_name": "Federico",
"last_name": "Balderas Mata",
"email": "federico.balderas@foograde.com.mx",
"address": {
  "line1": "Gral. Ortega #223D",
  "city": "Celaya",
  "state": "Guanajuato",
  "postal_code": "38010",
  "country_code": "MX"
}}

Как вы видите, я посылаю параметр на объект адреса:

/**
 * Get address
 * @VirtualProperty
 * @return array
 * @SerializedName("address")
 */
public function getAddress()
{
    return array(
        'line1' => $this->line1,
        'line2' =>  $this->line2,
        'line2' => $this->line3,
        'city' =>  $this->city,
        'state' => $this->state,
        'postal_code' => $this->postal_code,
        'country_code' => $this->country_code
    );
}

Но сейчас я пытаюсь получить запрос в той же форме с адресным объектом и отделить свойства для вставки их в базу данных.

Любая идея?

2 ответа

Я думаю, что вам следует переместить адрес из Customer в его собственную сущность, поэтому будут существовать Address и Customer с однонаправленным полем адреса manyToMany. Таким образом, вы можете создать форму для адреса, вставить ее в форму клиента, и вы также можете подготовить подтверждение для вас.

Как утверждают документы из JMSSerializer:

@VirtualProperty Эта аннотация может быть определена для метода, чтобы указать, что данные, возвращаемые методом, должны выглядеть как свойство объекта.

Примечание. Это работает только для сериализации и полностью игнорируется при десериализации.

Как утверждает xurshid29, лучше всего переместить "Адрес" в отдельную сущность, вы можете сделать так, чтобы вывод json оставался точно таким же, как и раньше, используя группы сериализации (чтобы включить / исключить нужные вам поля)

Таким образом, вы также можете десериализовать эти точно такие же данные обратно в соответствующие им объекты, просто используя JMSSerializer для десериализации данных json.

Другие вопросы по тегам