FosRestBundle:动态虚拟属性

FosRestBundle: Dynamic VirtualProperties

在 FOSRestBundle : Annotations 中,我想使用多个 @VirtualProperty 和动态名称,因为我从数据库中获取属性名称(未知数量的属性)

class User
{
   private $id;
   private $name;

   /**
    * @Serializer\VirtualProperty
    *
    * @return array
    */
   public function getSomeMethod()
   {
       return array('property_name1'=> 'value1', 'property_name2'=>'value2');
   }
}

其中 property_name1 & property_name2 .. property_name3 .. 等是动态的无限数字

我想将它们设置为虚拟属性,每个 属性 都有一个字符串值。

我不想将它们设置为一个数组 属性。

如果没有办法做到这一点,请告诉我是否可以从控制器执行相同的任务?

由于 FOSRestBundle 在底层使用 JMSSerializer,并且您希望能够完全控制序列化程序 returns 和输出数据强烈依赖于它接收到的输入,您可以为一个特定的 class.

有关更多详细信息,请参阅:

原来是评论...

You might be able to do this using @Serializer\Inline so that the properties of the array of bought up to be properties of the the parent object.

更多信息

这实际上允许您将要购买的数组或对象的公开属性或 keys/value 作为父对象的属性。

例如..

class Id
{
    /**
     * @Expose
     */
    private $id;

    //...
}

class Parent
{
    /**
     * @Expose
     * @Inline
     */
    private $id;

    /**
     * @Expose
     * @Inline
     */
    private $name = 'parent';

    /**
     * @Expose
     * @Inline
     */
    private [
        'key' => 'value',
    ];

    public function __construct()
    {
        $this->id = new Id('an-id');
    }
}

在序列化的时候会先转化成类似下面的数组

[
    'id' => 'an-id',
    'name' => 'parent',
    'key' => 'value',
]