Symfony 2 JMS Serializer Bundle - 仅为用户朋友序列化ID

时间:2014-06-05 14:10:45

标签: symfony jmsserializerbundle

我对Symfony 2中的JMS Serializer Bundle有疑问。

我想序列化一个用户实体,该实体与自身有多对多关系,称为" friends"。

虽然我想从原始用户公开一堆属性,但我只想要来自朋友对象的id,它们也是用户实体。

我该如何解决这个问题?

提前致谢。

2 个答案:

答案 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":}]}

具有组的解决方案允许更易于管理的回报。如果有一天你要发回用户名,你只需要更改组注释。