gpt4 book ai didi

rest - 在使用 FOSRestBundle 进行序列化期间检测到 Symfony 3.0.4 循环引用

转载 作者:行者123 更新时间:2023-12-04 17:12:26 31 4
gpt4 key购买 nike

我在 Symfony 项目中使用 FOSRestBundle。当我尝试处理 View 时,它在使用 Symfony 序列化程序和 JMSSerializer 序列化我的数据期间失败。

这是呈现响应的方法:

DefaultController.php

$em = $this->getDoctrine()->getManager('magellan');
$qb = $em->createQueryBuilder();

$query = $qb->select('h')
->from('DataBundle:Holding', 'h')
->where($qb->expr()->eq('h.id', ':holding_id'))
->setParameter('holding_id', $holding_id)
->getQuery();

$results = $query->getResult();

$view = $this->view($results, 200);

// Everything's ok up to this point

return $this->handleview($view);

这些是我的实体:

控股.php
class Holding
{

...

/**
* @ORM\OneToMany(targetEntity="Subsidiary", mappedBy="holding")
*/
private $subsidiaries;
}

子公司.php
class Subsidiary
{

...

/**
* @ORM\ManyToOne(targetEntity="Holding", inversedBy="subsidiaries")
* @ORM\JoinColumn(name="id_holding", referencedColumnName="id_holding")
*/
private $holding;

/**
* @ORM\OneToMany(targetEntity="Brand", mappedBy="subsidiary")
*/
private $brands;
}

Brand.php
class Brand
{

...

/**
* @ORM\ManyToOne(targetEntity="Subsidiary", inversedBy="brands")
* @ORM\JoinColumn(name="id_subsidiary", referencedColumnName="id_subsidiary")
*/
private $subsidiary;

/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="brand")
*/
private $products;
}

产品.php
class Product
{

...

/**
* @ORM\ManyToOne(targetEntity="Brand", inversedBy="products")
* @ORM\JoinColumn(name="id_brand", referencedColumnName="id_brand")
*/
private $brand;

/**
* @ORM\ManyToOne(targetEntity="Sector", inversedBy="products")
* @ORM\JoinColumn(name="id_sector", referencedColumnName="id_sector")
*/
private $sector;

/**
* @ORM\OneToMany(targetEntity="Commercial", mappedBy="product")
*/
private $commercials;
}

商业.php
class Commercial
{

...

/**
* @ORM\ManyToOne(targetEntity="Product", inversedBy="commercials")
* @ORM\JoinColumn(name="id_product", referencedColumnName="id_product")
*/
private $product;

/**
* @ORM\OneToMany(targetEntity="CommercialReport", mappedBy="commercial")
*/
private $reports;

CommercialReport.php
class CommercialReport
{

...

/**
* @ORM\ManyToOne(targetEntity="Commercial", inversedBy="reports")
* @ORM\JoinColumn(name="id_commercial", referencedColumnName="id_commercial")
*/
private $commercial;
}

Sector.php
class Sector
{

...

/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="sector")
*/
private $products;
}

使用默认的 symfony 序列化程序时,出现以下错误:

"message":"A circular reference has been detected (configured limit: 1).","class":"Symfony\Component\Serializer\Exception\CircularReferenceException"



并且在使用 JMSSerializer 时,当我转到 Controller 的相应页面时,该页面永远不会完成加载。同时在 dev.log 文件中,每秒都会添加新的 Doctrine.debug 条目,其中包含对我的数据库的请求。

最佳答案

    $normalizers->setCircularReferenceHandler(function ($object) {
return $object->getId();
});

如果您的 objectNormalizer() 在创建实例后添加它
它对我来说非常完美

关于rest - 在使用 FOSRestBundle 进行序列化期间检测到 Symfony 3.0.4 循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36775899/

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