将Symfony2实体转换为数组的最有效方法是什么?实体包含带有setter / getters的受保护字段。是否可以使用JMSSerializer
?
答案 0 :(得分:24)
使用此捆绑包是将实体转换为序列化格式的最有效方法。此外,它是由Sensio Labs推荐的。
要序列化您只需安装,配置此捆绑包然后:
$serializer = JMS\Serializer\SerializerBuilder::create()->build();
$serializer->serialize($object, 'json');
反序列化:
$serializer = JMS\Serializer\SerializerBuilder::create()->build();
$object = $serializer->deserialize($jsonData, 'MyNamespace\MyObject', 'json');
没有更多。
您还可以使用它将对象转换为数组:
$serializer = JMS\Serializer\SerializerBuilder::create()->build();
$array = $serializer->toArray($object);
此外,您可以使用序列化组阻止无限递归:
$serializer = JMS\Serializer\SerializerBuilder::create()->build();
$context = \JMS\Serializer\SerializationContext::create();
$context->setGroups($groups);
$serializer->serialize($object, 'json', $context);
此致
答案 1 :(得分:9)
使用JMSSerializer进行这么简单的任务对我来说似乎有些过分。我会用Symfony Serializer Component。该演示页面显示了如何将实体序列化为JSON。
如果你只想将它放到数组中,根本不需要序列化,你可以实例化GetSetMethodNormalizer
并使用它,因为组件使用数组作为规范化格式。
答案 2 :(得分:2)
如果尚未安装Symfony序列化程序组件。
安装composer require symfony/serializer
然后将任何实体转换为数组,如下所示。
$serializer = new Serializer(array(new ObjectNormalizer()));
$data = $serializer->normalize($result, null, array('attributes' =>
array('success','type','result','errorMessage')));
和
$ data = array:[“成功” =>真“ errorMessage” =>空“结果” =>“ 1”“类型” =>“ URL”]
答案 3 :(得分:0)
您还可以在实体本身中创建一个公共例程,这类似于序列化程序正在执行的操作。