0

首先,对不起我的英语......我会尝试以更好的方式表达。

我正在使用 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
    );
}

但是现在我要做的是以相同的形式获取请求,使用地址对象并将属性分开以将它们插入数据库。

任何想法?

4

2 回答 2

1

作为 JMSSerializer 状态的文档:

@VirtualProperty 这个注解可以定义在一个方法上,表示该方法返回的数据应该看起来像对象的一个​​属性。

注意:这仅适用于序列化,在反序列化期间完全被忽略。

正如 xurshid29 所说,最好将“地址”移动到一个单独的实体,您可以使用序列化组(包括/排除您想要的字段)让 json 输出与以前完全相同

这样,您还可以通过简单地使用 JMSSerializer 将这些完全相同的数据反序列化回其适当的实体,以反序列化 json 数据。

于 2015-10-02T09:18:07.233 回答
1

我认为您应该将地址从客户移动到它自己的实体,因此,将存在具有单向多对多地址字段的地址实体和客户实体。通过这种方式,您可以为地址创建一个表单,将其嵌入到客户表单中,您还可以为您准备好验证..

于 2015-10-02T06:19:07.453 回答