Как изменить уникальный валидатор FOSUserBundle? - PullRequest
0 голосов
/ 30 марта 2012

Я пытаюсь изменить способ, которым FOSUSerBundle проверяет имя пользователя / электронную почту, когда пользователь регистрируется, потому что мне нужно проверить, был ли пользователь ранее зарегистрирован, но он отписался, с помощью флага статуса в объекте. Я думаю, что лучший способ - проверить, есть ли ранее электронное письмо в базе данных, исключая тех, у кого флаг unsubscribed установлен в true, но как мне это сделать?

Итак, я вижу, как проверяется класс UniqueValidator, но я не понимаю, как это работает. Было бы здорово, если бы кто-то тоже мог это объяснить.

Спасибо.

1 Ответ

2 голосов
/ 30 марта 2012

UniqueValidator вызывает validateUnique метод класса UserManager.Вы можете расширить класс и изменить функцию для проверки пользователя

$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();
    }
}
...