JMS десериализует JSON и соответствует классу модели

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

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

{
"company_name": "Foograde",
"first_name": "Federico",
"last_name": "Balderas Mata",
"email": "[email protected]",
"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
    );
}

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

Есть идеи?


person Federico Balderas    schedule 01.10.2015    source источник
comment
Я действительно не понимаю, чего вы хотите, но, по крайней мере, я думаю, что -model-classes" rel="nofollow noreferrer">Вам пригодится проверка, сериализация и сопоставление json-запроса с классами модели. И, возможно, другие примеры отображения и моделирования на этом сайте.   -  person BentCoder    schedule 03.10.2015


Ответы (2)


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

person xurshid29    schedule 02.10.2015
comment
Спасибо... думаю, я перейду к объекту Address - person Federico Balderas; 04.10.2015

как указано в документах JMSSerializer:

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

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

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

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

person Sam Janssens    schedule 02.10.2015
comment
Спасибо... думаю, я перейду к объекту Address - person Federico Balderas; 04.10.2015