如何向实体的序列化 JSON 添加额外字段



我想向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);

但我不知道这种方法有多有效。

相关内容

  • 没有找到相关文章

最新更新