我有2个关联实体,Venue
和Promo
(多对多)。
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as JMS;
class Venue {
...
/**
* @ORM\ManyToMany(targetEntity="Promo", inversedBy="venues")
* @ORM\JoinTable(name="promo_venues")
* @JMS\Exclude()
*/
private $promos;
...
}
和
class Promo{
/**
* @ORM\ManyToMany(targetEntity="Venue", mappedBy="promos")
* @JMS\Exclude()
*/
private $venues;
}
我正在编写一个RESTful API来输出这些表的数据。在一个动作中,我需要输出与促销相关联的venues
(1)。在另一个方面,我需要输出venues
的列表而不包含促销数据(2)。
要解决(1),我可以简单地在Promo::venues
中远程排除注释。但是,这将导致在{2}中输出venues
列表,这是不合需要的。
我查看了代码,发现JMS的Serializer
并没有为其成员提供getter。
问题:有没有办法动态更新serialiser配置(在控制器内部),特别是添加/删除字段级配置?
答案 0 :(得分:1)
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as JMS;
class Venue {
...
/**
* @ORM\ManyToMany(targetEntity="Promo", inversedBy="venues")
* @ORM\JoinTable(name="promo_venues")
*/
private $promos;
...
}
class Promo{
/**
* @ORM\ManyToMany(targetEntity="Promo", mappedBy="promos")
* @JMS\Groups("onlyVenues")
*/
private $venues;
}
在您的控制器中,您可以执行(2):
$serializer->serialize($entities, 'json', SerializationContext::create()->setGroups(array('onlyVenues')));
对于(1),序列化而不设置任何组(即不应用排除策略)。