相关疑难解决方法(0)

Symfony序列化程序 - 设置循环引用全局

有没有办法在Symfony(而不是JMSSerializer)的序列化程序组件中使用任何配置或类似的东西设置循环引用限制?

我有一个带有FOSRestBundle的REST应用程序和一些包含其他应该序列化的实体的实体.但我遇到了循环引用错误.

我知道如何设置它:

$encoder    = new JsonEncoder();
$normalizer = new ObjectNormalizer();

$normalizer->setCircularReferenceHandler(function ($object) {
     return $object->getName();
});
Run Code Online (Sandbox Code Playgroud)

但这必须在多个控制器中完成(对我来说是开销).我想在config(.yml)中全局设置它,例如:

framework: 
    serializer:
        enabled: true
        circular_limit: 5
Run Code Online (Sandbox Code Playgroud)

找不到序列化程序API参考,所以我想知道它是否可能?

rest serialization circular-reference symfony fosrestbundle

10
推荐指数
2
解决办法
3014
查看次数

序列化多对多关联对象时,"已检测到循环引用"错误

自从升级到Symfony 2.7以来,在尝试序列化与给定组关联的联系人数组时,我似乎一直在"检测到循环引用"错误.它们是在多对多关联中设置的(一个组有很多联系人;一个联系人有很多组关联).

现在,我遵循指南使用序列化组按照2.7升级帖子,但似乎仍然得到错误.我的控制器代码目前如下:

$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')
));
Run Code Online (Sandbox Code Playgroud)

运行时$serializer->serialize(),我在1个循环引用后得到CircularReferenceException.到目前为止,我使用@Groups注释配置了我的Contact实体,如下所示:

/**
 * 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")
     * …
Run Code Online (Sandbox Code Playgroud)

serialization symfony

6
推荐指数
1
解决办法
2787
查看次数