首页 > 解决方案 > Symfony 3 - 无法使用会话获取用户

问题描述

我的项目中有一个用户实体。每次页面加载,我都会费心在数据库中使用查询来恢复用户。

我的目标是在登录后直接将其放入会话变量中,以便在我需要时将其取回。

在我的代码中,如果我对此进行测试:

$user = $this->checkBDD($mail,$fredurne,$nomComplet);
        dump($user);

        $this->session->set('user',$user);

        $user = $this->session->get('user');
        dump($user);

我有 :

在此处输入图像描述

所以,会议似乎工作。

现在,我将它投入应用。我创建了一个函数:

$user = $this->getUtilisateur($mail,$fredurne,$nomComplet);
dump($user);

public function getUtilisateur($mail,$fredurne,$nomComplet)
    {
        if(!$this->session->has('user'))
        {
            dump("user not in session");
            $user = $this->checkBDD($mail,$fredurne,$nomComplet);
            $this->session->set('user',$user);
        }

        else
        {
            dump("user in session");
            $user = $this->session->get('user');
        }

        return $user;
    }

我有 :

在此处输入图像描述

所以,我不明白有什么问题

标签: phpsymfony

解决方案


问题:
Doctrine 实体存储在会话中但需要刷新
但是当您从会话中检索实体时:Doctrine 工作单元不知道它必须处理该实体

在那之后你应该有一些关于 Doctrine 延迟加载的问题。

Session 不好存储一个实体。

更好的解决方案是:

  • 在您的服务中注入 Doctrine 实体管理器
  • 仅在会话中存储 id
  • getUtilisateur如果尚未完成,则在方法上检索具有 id 的用户

推荐阅读