我正在使用Symfony和JMS序列化器(通过FOSRestundle)构建一个API,该API公开了树。我创建了一个Tree实体,其中包含ID,标题和树的根节点。我也创建了一个Node实体,其中包含节点之间的链接。
我的API包含一个公共部分和一个管理部分,并且我希望根据控制器是否属于一个或另一个来公开不同的树:
我来了以下代码:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as Serializer;
/**
* @ORM\Entity(repositoryClass="App\Repository\TreeRepository")
*/
class Tree {
/**
* Unique ID to identify the tree
*
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Serializer\Groups({"ADMIN", "API"})
*/
private $id;
/**
* Name of the tree (example = a failure to diagnose)
*
* @ORM\Column(type="string", length=255)
* @Serializer\Groups({"ADMIN", "API"})
*/
private $title;
/**
* @ORM\OneToOne(targetEntity="App\Entity\Node")
* @ORM\JoinColumn(referencedColumnName="id")
*
* @Serializer\Groups({"ADMIN"})
*/
private $firstNode;
public function getId()
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
public function getFirstNode(): ?Node
{
return $this->firstNode;
}
public function setFirstNode(?Node $firstNode): self
{
$this->firstNode = $firstNode;
return $this;
}
}
如您所见,我创建了两个排除组,以便隐藏或公开所需的属性。很好!
但是,要使节点内的属性可见,我必须为所有属性添加@Serializer\Groups
批注,并将其传播到所有属性的类中依存关系。
我不想在所有实体类中都复制@Serializer\Groups
注释。因此,我尝试使用JMS排除策略(@Serializer\ExclusionPolicy()
),但这似乎不起作用。
在当前JMS排除组的条件下,是否有办法公开/排除一个类? 谢谢。
答案 0 :(得分:0)
24小时后,我意识到我为jms序列化程序滥用了排除组的概念。
这很好地解决了我的问题。但是也许我最初的需求仍然合法。