Symfony2 修改全局用户引用


Symfony2 modify global user reference?

我的User类中有函数setAttribute($key,$value)和getAttribute($key,$default)。当用户通过身份验证时,我想设置几个要设置的属性,这些属性稍后将在各种控制器中使用。

我尝试在我的成功处理程序函数中设置属性:

public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
      $token->getUser()->setAttribute("user_data_set", 1);
 }

但是当我尝试在我的控制器中调用它时,尚未设置该值

public function indexAction(Request $request) {
    //Get the logged in user
    $user = $this->getUser(); 
    //Entity Manager
    $em = $this->getDoctrine()->getManager();
    // this page is just used as the starting point to redirect the user to the appropriate page
    if($user->getAttribute("user_data_set", 0) == 1)
    {
        //Get Symfony1 route from the user data table
        $old_homepage = $user->getAttribute("user_homepage", "@default_homepage");
        //Convert route to Symfony2 format
        $new_homepage = $this->setForwardingAddress($old_homepage);
        return $this->redirect($this->generateUrl($new_homepage));
    }
    else
    {
        return $this->redirect('login');
    }        

}

如何修改全局用户而不是本地引用?

您显然需要交叉请求解决方案,因此您需要使用 DBsession

例如:

// Injecting Session service
public function __construct(Session $session){
    $this->session = $session
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
    $this->session->set('user_data_set', 1);
}

然后在控制器中:

$foo = $session->get('user_data_set');

这是你想要的吗?