将单个实体转换为数组

hsz*_*hsz 3 symfony

将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)

问候

  • 当然,但你解释了序列化为`json`格式.我想将它规范化为数组. (3认同)
  • @hsz `$jmsSerializer = SerializerBuilder::create()->build(); $data = $jmsSerializer->toArray($entities);` (2认同)

Igo*_*vić 9

使用JMSSerializer进行这么简单的任务对我来说似乎有些过分.我会使用Symfony Serializer Component.演示页面显示了如何将实体序列化为JSON.

如果你只想把它放到数组中,你根本不需要序列化,你可以实例化GetSetMethodNormalizer并使用它,因为组件使用数组作为规范化格式.


Ako*_*utz 7

如果您还没有安装 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)