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

しかし、この方法がどれほど効果的かわかりません。

関連する問題