2012-03-30 4 views
0

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

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

Спасибо.

ответ

2

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(); 
    } 
} 
+0

Хорошо, но как я должен продолжить расширение класса? Я создал пользовательский класс UserManager, но я не знаю, чтобы переопределить исходный класс FOS 'UserManager'. Я сохранил его в своем пакете, связанный с исходным классом как «использовать FOS \ UserBundle \ Entity \ UserManger как BaseUserManager», но, похоже, не работает. – Manu

+1

Проверьте второе решение этой записи (это https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/logging_by_username_or_email.md). –

+0

спасибо, это сработало. – Manu

 Смежные вопросы

  • Нет связанных вопросов^_^