Symfony2 - app.user未与数据库同步

时间:2015-03-14 16:03:02

标签: php symfony session fosuserbundle

我有一个名为lobby的页面,用户可以在其中接受好友请求。接受好友请求会导致此操作:

public function acceptFriendRequestAction($requestId)
{
    $user = $this->getUser();

    // Here $user is modified and changes are saved in database

    return $this->redirect('ACAppBundle:Lobby:index');
}

使用app.user呈现模板以显示朋友和请求。 但是,不考虑数据库中的更改。用户对象与acceptFriendRequestAction之前的用户对象相同。刷新页面时,app.user将与数据库同步。

为什么我需要刷新页面以查看数据库中的更改? 如何将app.user设置为更新用户?

当我使用转发代替重定向时,它可以正常运行,但我不想使用它,因为转发不会更改网址。

我还注意到有时会使用名为Proxies /.../ User的类而不是User。这可能与我的问题有关吗? 谢谢你的帮助,我已经坚持了好几天......

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

删除友情请求时,您不会更新实际关系。当您执行removeElement时,您只需将其移至内存中,直到将senderreceiver设置为空。

你可以手动完成这个......

$user->removePendingRequest($request);
$request->setSender(null);
// or $request->setReceiver(null);

或者您可以将其添加到添加/删除中以自动执行,如..

public function removeFriendship(FriendshipInterface $friendship)
{
    if ($this->friendships->contains($friendships)) {
        $this->friendships->removeElement($friendships);
        $friendship->setSender(null);
        // or $friendship->setReceiver(null);
    }
}

答案 2 :(得分:0)

所以我似乎找到了解决方案:

我换了:

return $this->redirect('ACAppBundle:Lobby:index');

return $this->redirect($this->generateUrl('ac_app_lobby'));

现在重定向后,无需重新加载页面即可显示新朋友。

我不明白两条线之间的区别。有人可以解释一下吗?