将Symfony2实体转换为数组的最有效方法是什么?实体包含带有setter/getters的受保护字段.有可能JMSSerializer吗?
小智 26
使用此捆绑包是将实体转换为序列化格式的最有效方法.此外,它是Sensio Labs推荐的.
要序列化您只需要安装,配置此捆绑包然后:
$serializer = JMS\Serializer\SerializerBuilder::create()->build();
$serializer->serialize($object, 'json');
Run Code Online (Sandbox Code Playgroud)
并反序列化:
$serializer = JMS\Serializer\SerializerBuilder::create()->build();
$object = $serializer->deserialize($jsonData, 'MyNamespace\MyObject', 'json');
Run Code Online (Sandbox Code Playgroud)
而已.
您还可以使用它将对象转换为数组:
$serializer = JMS\Serializer\SerializerBuilder::create()->build();
$array = $serializer->toArray($object);
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用序列化组阻止无限递归:
$serializer = JMS\Serializer\SerializerBuilder::create()->build();
$context = \JMS\Serializer\SerializationContext::create();
$context->setGroups($groups);
$serializer->serialize($object, 'json', $context);
Run Code Online (Sandbox Code Playgroud)
问候
使用JMSSerializer进行这么简单的任务对我来说似乎有些过分.我会使用Symfony Serializer Component.演示页面显示了如何将实体序列化为JSON.
如果你只想把它放到数组中,你根本不需要序列化,你可以实例化GetSetMethodNormalizer并使用它,因为组件使用数组作为规范化格式.
如果您还没有安装 Symfony Serializer 组件。
安装它 composer require symfony/serializer
然后只需将任何实体转换为数组,如下所示。
$serializer = new Serializer(array(new ObjectNormalizer()));
$data = $serializer->normalize($result, null, array('attributes' =>
array('success','type','result','errorMessage')));
Run Code Online (Sandbox Code Playgroud)
输出将是,
$data = array:[ "success" => true "errorMessage" => null "result" => "1" "type" => "url" ]
Run Code Online (Sandbox Code Playgroud)