如何修改FOSUserBundle唯一验证器?

时间:2012-03-30 12:52:57

标签: symfony fosuserbundle

我正在尝试修改FOSUSerBundle在用户注册时验证用户名/电子邮件的方式,因为我需要检查用户之前是否已注册,但他已通过实体中的状态标记取消订阅。我认为最好的方法是检查数据库以前是否有电子邮件,不包括那些标志unsubscribed设置为true的人,但我是如何做到的?

所以,我看到如何验证UniqueValidator类,但我不明白它是如何工作的。如果有人能够解释它会很棒。

感谢。

1 个答案:

答案 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();
    }
}