在FOSRestBundle:注释中,我想使用多个带有动态名称的@VirtualProperty,因为我从数据库(未知数量的属性)中获取属性名称
class User
{
private $id;
private $name;
/**
* @SerializerVirtualProperty
*
* @return array
*/
public function getSomeMethod()
{
return array('property_name1'=> 'value1', 'property_name2'=>'value2');
}
}
Where property_name1 &property_name2 . .property_name3 . .等都是动态的
我想将它们设置为虚拟属性,每个属性都有一个字符串值。
我不想把它们设置为只有一个属性的数组
如果没有办法做到这一点,请让我知道我是否可以从控制器做同样的任务?
原为注释…
您可以使用
@SerializerInline
来实现这一点,从而使数组的属性变为父对象的属性。
更多信息
这实际上允许您将数组或对象的公开属性或键/值购买为父对象的属性。
例如.
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序列化程序处理程序