【问题标题】:FosRestBundle: Dynamic VirtualPropertiesFosRestBundle:动态虚拟属性
【发布时间】:2016-11-07 11:17:13
【问题描述】:

在 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 .. etc 是动态的,具有无穷大的数字

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

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

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

【问题讨论】:

  • 您可以使用@Serializer\Inline 执行此操作,以便购买的数组的属性成为父对象的属性。
  • 谢谢你,工作就像一个魅力!请将其发布在新答案中以标记为已接受

标签: php symfony fosrestbundle jmsserializerbundle jms-serializer


【解决方案1】:

原来是评论...

您也许可以使用@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',
]

【讨论】:

    【解决方案2】:

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

    更多详情见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      相关资源
      最近更新 更多