我想为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 :(得分:0)
我找到了一个使用JMS的解决方案。首先,安装JMS。您可以在此网址中找到详细信息: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);
但我不知道这种方法的效果如何。