将Symfony 2实体转换为数组的最有效方法是什么?实体包含带有setter/getter的保护字段。是否可以使用JMSSerializer?
JMSSerializer
mpbci0fu1#
使用这个包是将实体转换为序列化格式的最有效的方法。要进行序列化,您只需安装、配置此软件包,然后:
$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);
此致
kxkpmulp2#
如果尚未安装Symfony序列化程序组件。安装它composer require symfony/serializer然后将任何实体转换为数组,如下所示。
composer require symfony/serializer
$serializer = new Serializer(array(new ObjectNormalizer())); $data = $serializer->normalize($result, null, array('attributes' => array('success','type','result','errorMessage')));
并且输出将是,
$data = array:[ "success" => true "errorMessage" => null "result" => "1" "type" => "url" ]
ej83mcc03#
对于这样一个简单的任务,使用JMSerializer似乎有点大材小用。我会使用Symfony Serializer Component。演示页面显示了如何将实体序列化为JSON。如果你只是想把它放到数组中,你根本不需要序列化,你可以示例化GetSetMethodNormalizer并使用它,因为组件使用数组作为规范化格式。
GetSetMethodNormalizer
h7appiyu4#
您也可以只在实体本身中创建一个公共例程,这与序列化程序所做的类似。
2uluyalo5#
您可以使用序列化程序组件:
$person = new Person(); $person->setName('foo'); $person->setAge(99); $serializer = new Symfony\Component\Serializer\Serializer([new ObjectNormalizer()]); var_dump($serializer->normalize($person));
请参阅文档:wwwhttps://symfony.com/doc/current/components/serializer.html#serializing-an-object此外,还可以全局配置DI
App.ObjectNormalizer: alias: Symfony\Component\Serializer\Normalizer\ObjectNormalizer Symfony\Component\Serializer\Serializer: arguments: $normalizers: 0: '@App.ObjectNormalizer'
然后简单地调用:
var_dump($serializer->normalize($person));
5条答案
按热度按时间mpbci0fu1#
使用这个包是将实体转换为序列化格式的最有效的方法。
要进行序列化,您只需安装、配置此软件包,然后:
并反序列化:
仅此而已。
您也可以使用它将对象转换为数组:
此外,您可以使用序列化群组来防止无限递归:
此致
kxkpmulp2#
如果尚未安装Symfony序列化程序组件。
安装它
composer require symfony/serializer
然后将任何实体转换为数组,如下所示。
并且输出将是,
ej83mcc03#
对于这样一个简单的任务,使用JMSerializer似乎有点大材小用。我会使用Symfony Serializer Component。演示页面显示了如何将实体序列化为JSON。
如果你只是想把它放到数组中,你根本不需要序列化,你可以示例化
GetSetMethodNormalizer
并使用它,因为组件使用数组作为规范化格式。h7appiyu4#
您也可以只在实体本身中创建一个公共例程,这与序列化程序所做的类似。
2uluyalo5#
您可以使用序列化程序组件:
请参阅文档:wwwhttps://symfony.com/doc/current/components/serializer.html#serializing-an-object
此外,还可以全局配置DI
然后简单地调用: