序列化扩展FOS用户模型的实体

时间:2014-06-21 09:52:32

标签: json symfony fosuserbundle

我有一个用户实体扩展了FOsUserBundle(FOS \ UserBundle \ Entity \ User)的实体模型,正如他们所推荐的那样。

然后我想得到我拥有的所有用户并将它们作为json传递给twig:

$em = $this->getDoctrine()->getManager(); 
$user_array = em->getRepository('MyBundle:user')->findByCustomer($customerID);

所以我有一个包含对象的数组。

如果我这样做:

json_encode($user_array);

json_encode($user_array[0]);

我得到一个空字符串{}。我至少期望得到FOS用户类中定义的数组

public function serialize()
{
    return serialize(array(
        $this->password,
        $this->salt,
        $this->usernameCanonical,
        $this->username,
        $this->expired,
        $this->locked,
        $this->credentialsExpired,
        $this->enabled,
        $this->id,
    ));
}

但实际上似乎FOS没有实现Jsonserialize因此它不起作用。 当我更改FOS用户类以实现Jsonserialize时,它会停止工作(例如我无法再连接......)。

有没有办法让这项工作与FOS一起使用?

1 个答案:

答案 0 :(得分:0)

FriendsOfSymfony用户实体中的所有字段都受到保护。

这意味着您可以在正在扩展它的User类中引用它们,就像在普通字段中一样。

这也意味着您可以在自己的User类中添加另一个方法,该方法将返回包含User的所有值的json编码数组。

这样的例子是:

public function json_encode()
{
    return json_encode(array(
        $this->password,
        $this->salt,
        $this->usernameCanonical,
        $this->username,
        $this->expired,
        $this->locked,
        $this->credentialsExpired,
        $this->enabled,
        $this->id,
    ));
}

你不能简单地对整个数组进行json编码,这样做的方法是:

$jsonEncodedUserArray = array();

foreach($user_array as $user) {
    $jsonEncodedUser = $user->json_encode();
    array_push($jsonEncodedUserArray, $jsonEncodedUser);
}