【发布时间】:2016-11-08 10:38:02
【问题描述】:
您好,我正在 Symfony 3.1 上创建 API REST。
我遇到了序列化和对象问题。
这是它返回给我的错误。
A circular reference has been detected (configured limit: 1).
堆栈溢出链接我已阅读但没有任何结果。
- Converting a Symfony2 PHP entity object for use within Javascript
- A circular reference has been detected (configured limit: 1) Serializer
这些是我阅读的用于尝试 seialize 我的对象的文档。
这里是填写 $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();
我试过这些东西:
-
第一个证明
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'); 第二个证明
在这些证明中,我在 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.com/doc/current/components/…
-
感谢 setCircularReferenceHandler 解决了我所有的问题。你知道我怎样才能关闭这些帖子吗?
-
我将提供链接作为解决方案,您可以接受我的回答。
-
我不知道该怎么做。我只知道帖子xD
-
很高兴您找到了它,如果您也想为我的答案投票,也可以点击“向上箭头”按钮。
标签: javascript php serialization doctrine-orm symfony