Symfony Serializer 由于多对多关系而循环引用

问题描述 投票:0回答:1

我需要一个重新运行 json 数据的 api,所以我尝试通过 symfony 中的控制器发送 json 数据,并且我正在使用序列化器,但我在将组分配给具有多对多关系的属性时遇到问题(类别和用户)。 控制器代码:

        $serializer = $this->container->get('serializer');
        $JSONprojects = $serializer->serialize($DATA, 'json', ['groups' => ['project','category']]);
        return new Response($JSONprojects); 

        return $JSONprojects ;

project.php(实体)。

class Project
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @Groups("project")
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     * @Groups("project")
     */
    private $name;


/**
 *
 * @ORM\ManyToMany(targetEntity=User::class, mappedBy="projects")
 */
private $users;

/**
 * @Groups("project")
 * @ORM\ManyToOne(targetEntity=User::class, inversedBy="myproject")
 * @ORM\JoinColumn(nullable=false)
 */
private $creator;

/**
 *
 * @ORM\ManyToOne(targetEntity=Category::class, inversedBy="projects")
 */
private $category;

Category.php(实体)

 class Category
 {
/**
 * @ORM\Id
 * @ORM\GeneratedValue
 * @ORM\Column(type="integer")
 *
 */
private $id;

/**
 * 
 * @ORM\Column(type="string", length=255)
 */
private $name;

/**
 *  
 * @ORM\Column(type="text")
 */
private $image;

/**
 *  
 * @ORM\OneToMany(targetEntity=Project::class, mappedBy="category")
 */
private $projects;
php json symfony serialization doctrine-orm
1个回答
1
投票

您可以使用序列化器处理循环引用,如下所示:

$JSONprojects = $serializer->serialize(
    $data,
    'json',
    [
        'circular_reference_handler' => function ($object) {return $object;},
        'groups' => ['project','category'],
    ]
);

当循环引用被命中时,它将返回该对象一次。

有关循环引用的更多信息,请参见 Symfony 文档

© www.soinside.com 2019 - 2024. All rights reserved.