如何向实体的序列化JSON添加额外字段
问题描述:
我想向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"
},...]
答
我发现使用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);
但我不知道这种方法有多有效。