我遇到的问题是我在一个包中设置用户传递给安全上下文。这证实了我,这工作正常。但是,每当我通过执行此操作从另一个包中的安全上下文中检索该用户时:
$this->getUser()
我得到了正确的实体,所有数据都在那里,但是Doctrine说它不是一个管理实体。
在令牌上设置用户的代码如下:
protected function logUserIn($userId, $name, $locale, $roles, $permissions)
{
$csbAuthUser = new User($name, $userId, $roles, $locale, $permissions);
$token = new UsernamePasswordToken(
$csbAuthUser,
null,
'csb',
$roles
);
if ($this->csbAuthEntityString) {
$user = $this->entityManager->getRepository($this->csbAuthEntityString)- >findOneBy(array(
'connectSBUser' => $userId,
)
);
$user->setUsername($name);
$user->setRoles($roles);
$user->setLocale($locale);
$user->setPermissions($permissions);
$token = new UsernamePasswordToken(
$user,
null,
'csb',
$roles
);
}
$this->securityContext->setToken($token);
这是一个问题,因为每次我想更新与用户实体有关系的任何东西时,Doctrine说它已经在关系中找到了一个新的实体。
答案 0 :(得分:0)
您以任何方式获得User
的实例 - 但您在方法顶部创建的默认用户不是托管对象。从您的实体经理返回的实体将是。
$this->csbAuthEntityString
的价值是多少?你确定它会进入IF声明吗?我会用一些调试输出仔细检查一下。