gpt4 book ai didi

javascript - Symfony 3 序列化器问题

转载 作者:行者123 更新时间:2023-12-03 05:42:07 24 4
gpt4 key购买 nike

您好,我正在 Symfony 3.1 上创建 API REST。

我在序列化和对象时遇到问题。

这些是它返回给我的错误。

A circular reference has been detected (configured limit: 1).

我已阅读堆栈溢出链接,但没有任何结果。

这些是我阅读的文档,用于尝试序列化我的对象。

以下是填充 $employees 的代码:

$em = $this->getDoctrine()->getManager();
$dql = " SELECT e FROM BackendBundle:Employees e
INNER JOIN BackendBundle:Companies c
WITH e.idCompany = c.idCompany
WHERE c.idUser = ?1";
$query = $em->createQuery($dql);
$query->setParameter(1,$user);
$employees = $query->getResult();

我尝试过这些东西:

  1. 第一个证明

     use Symfony\Component\Serializer\Serializer;
    use Symfony\Component\Serializer\Encoder\XmlEncoder;
    use Symfony\Component\Serializer\Encoder\JsonEncoder;

    use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
    $encoders = array(new XmlEncoder(), new JsonEncoder());
    $normalizers = array(new ObjectNormalizer());
    $serializer = new Serializer($normalizers,$encoders);
    $data = $serializer->serialize($employees, 'json');
  2. 第二个证明

在这些证明中,我在 Symfony 3 Serialzer 上默认阅读的是 deseabe。为此,我修改了这些文件:

app/config/config.yml

framework:
#esi: ~
#translator: { fallbacks: ["%locale%"] }
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
#serializer: { enable_annotations: true }
templating:
engines: ['twig']
default_locale: "%locale%"
trusted_hosts: ~
trusted_proxies: ~
session:
# http://symfony.com/doc/current/reference/configuration/framework.html#handler-id
handler_id: session.handler.native_file
save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
fragments: ~
http_method_override: true
assets: ~
serializer:
enabled: true
enable_annotations: true

这里最重要的是我激活序列化器的最后几行。

app/config/servces.yml

services:    
get_set_method_normalizer:
class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
public: false
tags:
- { name: serializer.normalizer }

src/AppBundle/Controller/DefaultController.php

<?php
$serializer = $this->get('serializer');
$json = $serializer->serialize($employees,'json');

还有更多证据表明您正在阅读的内容与它之间没有太大区别。

请问有人知道如何在 Symfony 3 上序列化对象。我整个早上都在尝试它,但遇到了同样的错误。

A circular reference has been detected (configured limit: 1).

最佳答案

您的问题是,序列化员工正在序列化他们的公司,而该公司又引用了员工,这是一个完美的循环引用。

您可以在 Symfony 的序列化器中处理这些循环引用,例如通过捕获 CircularReferenceException 或在 setCircularReferenceHandler 中使用自定义可调用对象,并且仅序列化未引用回原始实体的属性。

参见Symfony's documentation详细说明。

关于javascript - Symfony 3 序列化器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40484749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com