我想向JSON编码的实体添加额外的字段。但此字段不会在数据库中。它只是一个虚拟字段或函数。我有一个这样的实体;
/**
* @ORMTable(name="sample_table")
* @ORMEntity()
*/
class InstagramUser
{
/**
* @ORMColumn(type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMColumn(type="string")
*/
private $userName;
/**
* @ORMColumn(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。您可以在以下网址中找到详细信息:https://jmsyst.com/libs/serializer
之后,像这样修改类;
/**
* @ORMTable(name="sample_table")
*/
class UserTable
{
/**
* @ORMColumn(type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMColumn(type="string")
*/
private $userName;
/**
* @ORMColumn(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);
但我不知道这种方法有多有效。