我对Symfony 2中的JMS Serializer Bundle有疑问。
我想序列化一个用户实体,该实体与自身有多对多关系,称为" friends"。
虽然我想从原始用户公开一堆属性,但我只想要来自朋友对象的id,它们也是用户实体。
我该如何解决这个问题?
提前致谢。
答案 0 :(得分:1)
好的,在我写这个问题时,我也解决了它。
解决方案是使用@VirtualProperty注释。
示例:
use JMS\Serializer\Annotation\VirtualProperty;
use JMS\Serializer\Annotation\SerializedName;
// ...
/**
* @VirtualProperty
* @SerializedName("friends")
*/
public function getFriendIdsOnly()
{
$friendIds = array();
foreach ($this->friends as $friendEntity) {
$friendIds[] = $friendEntity->getId();
}
return $friendIds;
}
有了这个,"朋友" key将包含一组用户ID。
答案 1 :(得分:1)
或许您可以使用@Groups注释。
class User
{
/*
* @JMS\Groups({"user_id", "friend_id"})
*/
$id;
/*
* @JMS\Groups({"user_friends"})
*/
$friends;
}
如果要序列化,请设置["user_friends", "friend_id"]
组。与您的解决方案的不同之处在于返回的格式(如果我们谈论json)
// You
{"id":, "friends":["id", "id"]}
// Me
{"id":, "friends":[{"id":}, {"id":}]}
具有组的解决方案允许更易于管理的回报。如果有一天你要发回用户名,你只需要更改组注释。