我有一个用户实体扩展了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一起使用?
答案 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);
}