FosRestBundle:动态虚拟属性


FosRestBundle: Dynamic VirtualProperties

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

class User
{
   private $id;
   private $name;
   /**
    * @Serializer'VirtualProperty
    *
    * @return array
    */
   public function getSomeMethod()
   {
       return array('property_name1'=> 'value1', 'property_name2'=>'value2');
   }
}

Where property_name1 &property_name2 . .property_name3 . .等都是动态的

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

我不想把它们设置为只有一个属性的数组

如果没有办法做到这一点,请让我知道我是否可以从控制器做同样的任务?

原为注释…

您可以使用@Serializer'Inline来实现这一点,从而使数组的属性变为父对象的属性。

更多信息

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

例如

.

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',
]

由于FOSRestBundle在底层使用JMSSerializer,并且您希望能够完全控制序列化器返回的内容,并且输出数据强烈依赖于它接收的输入,因此您可以为一个特定的类编写自定义处理程序。

详细信息请参见:

    http://jmsyst.com/libs/serializer/master/handlers
  • http://jmsyst.com/bundles/JMSSerializerBundle/master/configuration
  • 在symfony2中创建JMS序列化程序处理程序