symfony 将单个实体转换为数组

jtoj6r0c  于 2022-11-16  发布在  其他
关注(0)|答案(5)|浏览(154)

将Symfony 2实体转换为数组的最有效方法是什么?实体包含带有setter/getter的保护字段。是否可以使用JMSSerializer

mpbci0fu

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

此致

kxkpmulp

kxkpmulp2#

如果尚未安装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:[ "success" => true "errorMessage" => null "result" => "1" "type" => "url" ]
ej83mcc0

ej83mcc03#

对于这样一个简单的任务,使用JMSerializer似乎有点大材小用。我会使用Symfony Serializer Component。演示页面显示了如何将实体序列化为JSON。
如果你只是想把它放到数组中,你根本不需要序列化,你可以示例化GetSetMethodNormalizer并使用它,因为组件使用数组作为规范化格式。

h7appiyu

h7appiyu4#

您也可以只在实体本身中创建一个公共例程,这与序列化程序所做的类似。

2uluyalo

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

相关问题