0

ユーザーが以前に登録されているかどうかを確認する必要があるため、FOSUSerBundle がユーザー登録時にユーザー名/電子メールを検証する方法を変更しようとしていますが、エンティティのステータスフラグを介して、彼は購読を解除しました。unsubscribedフラグがtrueに設定されている人を除いて、電子メールが以前にデータベースにあるかどうかを確認するのが最善の方法だと思いますが、どうすればよいですか?

だから、クラスでどのように検証するUniqueValidatorかはわかりますが、それがどのように機能するかわかりません。どなたか解説していただけると助かります。

ありがとう。

4

1 に答える 1

2

UniqueValidatorクラスのvalidateUniqueメソッドを呼び出します。UserManagerクラスを拡張し、関数を変更してユーザーをチェックすることができます

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

編集

2番目の質問では、クラス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();
    }
}
于 2012-03-30T15:01:13.190 に答える