2017-10-28 320 views
1

我想向JSON编码实体添加额外字段。但是这个字段不在数据库中。它只是一个虚拟的领域或功能。我有这样的实体;如何向实体的序列化JSON添加额外字段

/** 
* @ORM\Table(name="sample_table") 
* @ORM\Entity() 
*/ 
class InstagramUser 
{ 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(type="string") 
    */ 
    private $userName; 

    /** 
    * @ORM\Column(type="string", nullable=true) 
    */ 
    private $fullName; 

    ... 

    private $extraField = "EXTRA_FIELD"; 

} 

通常情况下,Symfony将这个实体序列化,

[{ 
    "id": 1, 
    "userName": "USER_NAME", 
    "fullName": "FULL_NAME" 
},...] 

问题:我想将此字段添加到JSON数据。我怎样才能做到这一点?我想得到这样的JSON;

[{ 
    "id": 1, 
    "userName": "USER_NAME", 
    "fullName": "FULL_NAME", 
    "extraField": "EXTRA_FIELD" 
},...] 

回答

0

我发现使用JMS的解决方案。首先,安装JMS。您可以在此URL中找到详细信息:https://jmsyst.com/libs/serializer

之后,像这样修改类;

/** 
* @ORM\Table(name="sample_table") 
*/ 
class UserTable 
{ 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(type="string") 
    */ 
    private $userName; 

    /** 
    * @ORM\Column(type="string", nullable=true) 
    */ 
    private $fullName; 

    ... 

    /** 
    * @VirtualProperty 
    * @SerializedName("extraField") 
    * @return string 
    */ 
    public function getExtraField(){ 
     return "EXTRA_FIELD"; 
    } 

} 

最后,返回JSON用下面的方法。

$serializer = SerializerBuilder::create()->build(); 
$jsonContent = $serializer->serialize($user, 'json'); 

return new JsonResponse($jsonContent, 200, array(), true); 

但我不知道这种方法有多有效。