加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 在Symfony中检测到循环引用

发布时间:2020-12-13 16:05:12 所属栏目:PHP教程 来源:网络整理
导读:我遇到了与Symfony中的循环引用相关的问题,我怀疑它是 由序列化器引起但我还没有找到任何答案.这是我创建的实体,路线和控制器.在这方面的任何建议将不胜感激. user.php的 class User{ /** * @var int * * @ORMColumn(name="id",type="integer") * @ORMId *
我遇到了与Symfony中的循环引用相关的问题,我怀疑它是
由序列化器引起但我还没有找到任何答案.这是我创建的实体,路线和控制器.在这方面的任何建议将不胜感激.

user.php的

class User
{
    /**
      * @var int
      *
      * @ORMColumn(name="id",type="integer")
      * @ORMId
      * @ORMGeneratedValue(strategy="AUTO")
    */
    private $id;

    /**
      * @ORMOneToMany(targetEntity="Dieta",mappedBy="user")
    */
    private $dietas;
    public function __construct()
    {
       $this->dietas = new ArrayCollection();
    }
   //...
   //...
}

Dieta.php

class Dieta
        {
            /**
             * @var int
             *
             * @ORMColumn(name="id",type="integer")
             * @ORMId
             * @ORMGeneratedValue(strategy="AUTO")
             */
            private $id;

            /**
             * @ORMManyToOne(targetEntity="User",inversedBy="dietas")
             * @ORMJoinColumn(name="users_id",referencedColumnName="id")
             */
            private $user;
            public function __construct()
            {
                $this->user = new ArrayCollection();
            }

            //...
            //... 
        }

路线

/**
 * @Route("dietas/list/user/{id}",name="userDietas")
 */

DietaController.php的方法

public function userListAction($id)
    {
        $encoders = array(new XmlEncoder(),new JsonEncoder());
        $normalizers = array(new ObjectNormalizer());
        $serializer = new Serializer($normalizers,$encoders);

        $user = $this->getDoctrine()
            ->getRepository('AppBundle:User')->find($id);

        $dietaDatas = $user->getDietas();


        if(!$dietaDatas) {
            throw $this->createNotFoundException(
                'There is no data...'
            );
        }

        $jsonContent = $serializer->serialize($dietaDatas,'json');
        return new Response($jsonContent);
    }

解决方法

你需要调用$normalizer-> setCircularReferenceHandler()
请阅读以下官方文档:

handling-circular-references

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读