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.