2015-10-12 14 views
5

Kể từ khi nâng cấp lên Symfony 2.7, tôi dường như bị lỗi 'tham chiếu vòng tròn' khi cố gắng sắp xếp hàng loạt liên hệ một nhóm nhất định. Chúng được thiết lập trong một liên kết nhiều-nhiều (một nhóm có nhiều liên hệ; một liên hệ có nhiều nhóm liên kết).'Tham chiếu thông tư đã được phát hiện' lỗi khi tuần tự hóa nhiều đối tượng liên quan đến

Bây giờ, tôi đã làm theo hướng dẫn để sử dụng các nhóm tuần tự theo 2.7 upgrade post, nhưng dường như vẫn gặp lỗi. Mã điều khiển của tôi cho điều này hiện tại như sau:

$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') 
)); 

Khi chạy $serializer->serialize(), tôi nhận được CircularReferenceException sau 1 tham chiếu vòng tròn. Cho đến nay tôi đã tổ chức Liên của tôi cấu hình như vậy, với chú thích @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 
} 

Và thực thể ContactGroup tôi:

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

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

    // ... 
} 

Có cái gì tôi đang mất tích ở đây để có được xung quanh vấn đề tuần hoàn ? Cảm ơn nhiều.

+0

Cố gắng sử dụng http://jmsyst.com/bundles/JMSSerializerBundle – Jekis

Trả lời

0

Có vẻ như đã xảy ra sự cố với cấu hình. Bạn phải kích hoạt nhóm serialization chú thích:

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

Và tuyên bố sử dụng hợp lý phải có mặt trong lớp thực thể ContactGroup

use Symfony\Component\Serializer\Annotation\Groups; 
1
$normalizers->setCircularReferenceHandler(function ($object) { 
     return $object->getId(); 
    }); 

Chỉ cần thêm nó sau khi bạn thực hiện các thể hiện của objectNormalizer của bạn;

Các vấn đề liên quan