gpt4 book ai didi

symfony - 序列化多对多关联对象时出现“已检测到循环引用”错误

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

自从升级到 Symfony 2.7 以来,在尝试序列化与给定组关联的联系人数组时,我似乎不断收到“已检测到循环引用”错误。它们设置为多对多关联(一个组有多个联系人;一个联系人有多个组关联)。

现在,我按照 2.7 upgrade post 遵循使用序列化组的指南,但似乎仍然出现错误。我的 Controller 代码目前如下:

$group = $this->getDoctrine()
->getRepository('TwbGroupsBundle:ContactGroup')
->find($id);
$groupContacts = $group->getContacts();

$encoder = new JsonEncoder();
$normalizer = new ObjectNormalizer();
$serializer = new Serializer(array($normalizer), array($encoder));

$json = $serializer->serialize($groupContacts, 'json', array(
'groups' => array('public')
));

运行 $serializer->serialize() 时,我在 1 次循环引用后收到 CircularReferenceException。到目前为止,我的联系人实体已像这样配置,并带有 @Groups 注释:

/**
* Contact
*
* @ORM\Table(name="tblContacts")
* @ORM\Entity(repositoryClass="Twb\Bundle\ContactsBundle\Entity\Repository\ContactRepository")
*/
class Contact implements ContactInterface
{
/**
* @var string
*
* @ORM\Column(name="ContactName", type="string", length=50, nullable=true)
* @Groups({"public"})
*/
private $contactname;

/**
* @var integer
*
* @ORM\Column(name="ContactID", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @Groups({"public"})
*/
private $contactid;

/**
*
* @var ArrayCollection
* @ORM\ManyToMany(targetEntity="Twb\Bundle\GroupsBundle\Entity\ContactGroup", inversedBy="contacts")
* @ORM\JoinTable(name="tblContactsGroupsAssignments",
* joinColumns={@ORM\JoinColumn(name="contactId", referencedColumnName="ContactID")},
* inverseJoinColumns={@ORM\JoinColumn(name="contactGroupId", referencedColumnName="id")}
* )
*/
protected $contactGroups;

// ...getters/setters and so on
}

还有我的 ContactGroup 实体:

/**
* ContactGroup
*
* @ORM\Table(name="tblContactsGroups")
* @ORM\Entity
*/
class ContactGroup
{
// ...

/**
*
* @var Contact
*
* @ORM\ManyToMany(targetEntity="Twb\Bundle\ContactsBundle\Entity\Contact", mappedBy="contactGroups")
*/
private $contacts;

// ...
}

我是否缺少一些东西来解决循环问题?非常感谢。

最佳答案

配置好像​​有问题。您必须启用序列化组注释:

# app/config/config.yml
framework:
# ...
serializer:
enable_annotations: true

ContactGroup 实体类中必须存在正确的使用语句

use Symfony\Component\Serializer\Annotation\Groups;

关于symfony - 序列化多对多关联对象时出现“已检测到循环引用”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33090065/

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