我正在尝试修改FOSUSerBundle在用户注册时验证用户名/电子邮件的方式,因为我需要检查用户之前是否已注册,但他已通过实体中的状态标记取消订阅。我认为最好的方法是检查数据库以前是否有电子邮件,不包括那些标志unsubscribed
设置为true的人,但我是如何做到的?
所以,我看到如何验证UniqueValidator
类,但我不明白它是如何工作的。如果有人能够解释它会很棒。
感谢。
答案 0 :(得分:2)
UniqueValidator
调用UserManager
类的validateUnique方法。您可以扩展类并修改函数以检查用户
$this->findUserByEmail($user->getEmail());
修改
对于第二个问题,您必须覆盖UpdateUser
类的UserManager
方法。
/**
* Updates a user.
*
* @param UserInterface $user
* @param Boolean $andFlush Whether to flush the changes (default true)
*/
public function updateUser(UserInterface $user, $andFlush = true)
{
$existsUser = $this->findUserByEmail($user->getEmail());
$this->updateCanonicalFields($user);
$this->updatePassword($user);
if($existsUser && null === $user->getId()){
$user->setId($existsUser->getId());
$this->em->merge($user);
} else{
$this->em->persist($user);
}
if ($andFlush) {
$this->em->flush();
}
}