Symfony 如何访问每个实体';引发“serializer.pre_serialize”事件时的属性
我希望递归访问序列化实体的每个属性,检查是否设置了字符串,并验证元数据属性是否正确设置为Symfony 如何访问每个实体';引发“serializer.pre_serialize”事件时的属性,symfony,jmsserializerbundle,symfony-2.8,jms-serializer,Symfony,Jmsserializerbundle,Symfony 2.8,Jms Serializer,我希望递归访问序列化实体的每个属性,检查是否设置了字符串,并验证元数据属性是否正确设置为string,否则更改它以允许序列化 假设有一个users属性是ArrayCollection,但我强制该值在拐角处为字符串 我设置了一个SerializationSubscriber来捕获序列化程序。pre_serialize事件,但是我没有找到任何文档来利用访问者和周围环境 有什么提示吗?哎哟!通过反思?非常昂贵,不是吗?不幸的是,它不是递归的:我真正需要的是访问每个属性并在需要时更改类型。因为没有事件捕
string
,否则更改它以允许序列化
假设有一个users
属性是ArrayCollection
,但我强制该值在拐角处为字符串
我设置了一个SerializationSubscriber
来捕获序列化程序。pre_serialize
事件,但是我没有找到任何文档来利用访问者和周围环境
有什么提示吗?哎哟!通过反思?非常昂贵,不是吗?不幸的是,它不是递归的:我真正需要的是访问每个属性并在需要时更改类型。因为没有事件捕捉访问节点的时刻,所以我应该按照JMSSerialize的方式重新访问实体的所有属性。我觉得相当贵
class MyEventSubscriber implements JMS\Serializer\EventDispatcher\EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
array('event' => 'serializer.pre_serialize', 'method' => 'onPreSerialize'),
);
}
public function onPreSerialize(JMS\Serializer\EventDispatcher\PreSerializeEvent $event)
{
/*
* @var YourEntity $object
*/
$object = $event->getObject();
$reflect = new \ReflectionClass($foo);
$props = $reflect->getProperties(\ReflectionProperty::IS_PRIVATE);
foreach ($props as $prop) {
$method = 'get'.ucfirst($prop->getName());
// here is call of methods like getId(), getName() etc,
// depending on name of entity properties
$object->$method();
}
}
}