2017-10-28 167 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); 

但我不知道這種方法有多有效。