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

하지만이 방법이 얼마나 효과적인지 알 수 없습니다.