我想以递归方式访问序列化实体的每个属性,检查是否设置了字符串并验证元数据属性是否已正确设置为string
,否则请更改它以允许序列化。
想象一个users
属性是ArrayCollection
,但我强制该值在角落情况下是一个字符串。
我设置SerializationSubscriber
来抓住serializer.pre_serialize
事件,但我没有找到任何文档来利用Visitor
和周围环境。
任何提示?
答案 0 :(得分:0)
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();
}
}
}