2012-03-30 59 views
0

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

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

谢谢。

回答

2

UniqueValidator要求validateUniqueUserManager类的方法。您可以扩展类和修改函数来检查用户

$this->findUserByEmail($user->getEmail()); 

编辑

对于第二个问题,你必须覆盖UserManager类的UpdateUser方法。

/** 
* 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 2012-04-02 08:56:13

+1

检查[this]的第二个解决方案(https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/logging_by_username_or_email.md)doc条目。 – 2012-04-02 09:32:24

+0

谢谢,它的工作。 – Manu 2012-04-02 14:14:34