Symfony2 - app.user 未与数据库同步
Symfony2 - app.user not synced with database
我有一个名为大厅的页面,用户可以在其中接受好友请求。接受好友请求会导致此操作:
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 设置为更新用户?
当我使用转发而不是重定向时它可以工作,但我不想使用它,因为转发不会更改 URL。
我还注意到有时使用 class 命名的 Proxies/.../User 而不是 User。这可能与我的问题有关吗?
感谢您的帮助,我已经坚持了好几天了...
您需要为 $request 字段
中的 Friendship class 关系添加级联选项
您在删除好友请求时并没有更新实际关系。当您执行 removeElement
时,您只是在内存中删除它,直到将 sender
或 receiver
设置为空。
您可以手动完成此操作,例如..
$user->removePendingRequest($request);
$request->setSender(null);
// or $request->setReceiver(null);
或者您可以将其添加到 add/remove 以自动完成,例如..
public function removeFriendship(FriendshipInterface $friendship)
{
if ($this->friendships->contains($friendships)) {
$this->friendships->removeElement($friendships);
$friendship->setSender(null);
// or $friendship->setReceiver(null);
}
}
看来我找到了解决办法:
我替换了:
return $this->redirect('ACAppBundle:Lobby:index');
和
return $this->redirect($this->generateUrl('ac_app_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 设置为更新用户?
当我使用转发而不是重定向时它可以工作,但我不想使用它,因为转发不会更改 URL。
我还注意到有时使用 class 命名的 Proxies/.../User 而不是 User。这可能与我的问题有关吗? 感谢您的帮助,我已经坚持了好几天了...
您需要为 $request 字段
中的 Friendship class 关系添加级联选项您在删除好友请求时并没有更新实际关系。当您执行 removeElement
时,您只是在内存中删除它,直到将 sender
或 receiver
设置为空。
您可以手动完成此操作,例如..
$user->removePendingRequest($request);
$request->setSender(null);
// or $request->setReceiver(null);
或者您可以将其添加到 add/remove 以自动完成,例如..
public function removeFriendship(FriendshipInterface $friendship)
{
if ($this->friendships->contains($friendships)) {
$this->friendships->removeElement($friendships);
$friendship->setSender(null);
// or $friendship->setReceiver(null);
}
}
看来我找到了解决办法:
我替换了:
return $this->redirect('ACAppBundle:Lobby:index');
和
return $this->redirect($this->generateUrl('ac_app_lobby'));
现在重定向后,无需重新加载页面即可显示新朋友。
虽然我不明白这两行之间有什么区别。有人可以解释一下吗?