首先,对我的英语感到抱歉..我会尝试以更好的方式表达。
我正在使用JMSSerializerBundle在Symfony 2.7中构建API Rest。 我得到了一个客户模型,地址属性分开:(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
);
}
但是现在我要做的是以相同的形式获取请求,使用地址对象并将属性分开以将它们插入数据库中。
有什么想法吗?
答案 0 :(得分:1)
我认为您应该将地址从Customer移动到自己的实体,因此,会有Address entity和Customer实体具有单向manyToMany地址字段。通过这种方式,您可以创建一个地址表单,将其嵌入到客户表单中,您也可以为您准备好验证。
答案 1 :(得分:1)
作为JMSSerializer的文档状态:
@VirtualProperty 可以在方法上定义此注释,以指示方法返回的数据应该看起来像对象的属性。
注意:这仅适用于序列化,在反序列化期间完全被忽略。
正如xurshid29所述,最好将“地址”移动到一个单独的实体,你可以通过使用序列化组(包括/包含你想要的字段)使json输出保持与以前完全相同
这样,您也可以通过简单地使用JMSSerializer将这些完全相同的数据反序列化回适当的实体,以反序列化json数据。