【问题标题】:How to add extra fields to serialized JSON of an entity如何向实体的序列化 JSON 添加额外字段
【发布时间】:2017-10-28 14:00:03
【问题描述】:

我想向 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"
},...]

【问题讨论】:

    标签: php json symfony serialization doctrine-orm


    【解决方案1】:

    我找到了使用 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);
    

    但我不知道这种方法的效果如何。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 2015-08-26
      • 2012-09-05
      相关资源
      最近更新 更多