Symfony 3串行器问题
Symfony 3 serializer problems
您好,我正在Symfony 3.1上创建一个API REST。
我在序列化和对象时遇到问题。
这是它返回给我的错误。
A circular reference has been detected (configured limit: 1).
我读取的堆栈溢出链接没有任何结果。
- 转换Symfony2 PHP实体对象以在Javascript中使用
- 检测到循环引用(配置的限制:1(序列化程序
这是我准备的文件,我试着抓住我的目标。
- Symfony如何使用序列化程序
- Symfony Serializer组件
这是fill$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序列号上默认读取的是desabe。为此,我修改了这些文件:
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
这里unic最重要的是我激活序列化程序的最后几行。
app/config/services.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).
您的问题是,序列化Employees就是序列化他们的公司,该公司再次引用了Employee,这是一个完美的循环引用。
您可以在Symfony的Serializer中处理这些循环引用,例如,通过捕获CircularReferenceException或通过在setCircularReferencesHandler中使用自定义可调用,并仅序列化未引用回原始实体的属性。
有关详细说明,请参阅Symfony的文档。
$normalizers->setCircularReferenceHandler(function ($object) {
return $object->getId();
});
在创建ObjectNormalizer((的实例后添加此bro。它非常适合我!
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 如何解决Yii中的页面刷新问题
- Safari(Mac OS)上的jQuery平滑滚动问题
- jqGrid树网格问题
- 用于'魔术串'属性
- 使用正则表达式评估电子邮件地址时出现性能问题
- 如何消除代码中的未定义和其他问题
- JavaScript代码问题:我正在将对象转换为数组
- 使用reduce串行链接Javascript承诺时的作用域问题
- Symfony 3串行器问题
- 串行滚轮问题