在FOSRestBundle:@VirtualProperty中,我希望使用多个带有动态名称的@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 ..等等是动态的,有无穷大的数。
我想将它们设置为虚拟属性,每个属性都有一个字符串值。
我不想用一个属性将它们设置为数组。
如果没有办法做到这一点,请告诉我,如果我可以做同样的任务,从控制器?
发布于 2016-11-07 12:10:33
最初是评论..。
您可以使用
@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',
]发布于 2016-11-07 11:30:55
由于FOSRestBundle在底层使用JMSSerializer,并且希望能够完全控制序列化程序返回的内容,输出数据强烈依赖于它接收的输入,因此可以为一个特定的类编写一个自定义处理程序。
有关更多详细信息,请参见:
https://stackoverflow.com/questions/40463873
复制相似问题