首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FosRestBundle:动态VirtualProperties

FosRestBundle:动态VirtualProperties
EN

Stack Overflow用户
提问于 2016-11-07 11:17:13
回答 2查看 168关注 0票数 1

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

代码语言:javascript
复制
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 ..等等是动态的,有无穷大的数。

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-07 12:10:33

最初是评论..。

您可以使用@Serializer\Inline来完成这一任务,这样购买的数组的属性就可以成为父对象的属性。

更多的信息

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

例如..。

代码语言:javascript
复制
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');
    }
}

将首先转换为类似于以下序列化过程的数组

代码语言:javascript
复制
[
    'id' => 'an-id',
    'name' => 'parent',
    'key' => 'value',
]
票数 1
EN

Stack Overflow用户

发布于 2016-11-07 11:30:55

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40463873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档