1

私はバックエンドシステムを書いていますが、ユーザーが自分のメールアドレスを変更できるようにしたいと思います。ユーザーが入力したメールアドレスがデータベースにすでに存在するかどうかを確認するカスタムバリデーターを作成しました。

ここで問題が発生しました。フォームにはユーザーデータが入力されているため、彼の電子メールアドレスが電子メールフィールドのデフォルト値です。これで、ユーザーがフォームを送信すると、(もちろん)このメールアドレスがすでに存在するため、バリデーターはエラーをスローします。

どうすればこの問題を解決できますか?たぶん、バリデーターはこれを行うための正しいアプローチではありませんか?または、ユーザーがデフォルト値を変更したかどうかを検出し、その場合にのみバリデーターを起動するソリューションはありますか?

4

1 に答える 1

3

へへへ、それはバリデーターに初めて出くわす一般的な問題です。重要なのは、バリデーターからその 1 つの ID を削除することです。バリデーター内で、現在のユーザー ID を句から除外します。

$validator = new Zend_Validate_Db_NoRecordExists(
  array(
      'table' => 'users',
      'field' => 'email',
      'exclude' => array(
        'field' => 'id',
        'value' => $id_to_edit
    )
  )
);

編集:これが何をするかについての詳細な説明。データベースからすべての電子メール アドレスを取得し、競合がないかどうかをチェックします。メールが存在する場合は、id=$id_to_edit からのメールを無視するだけです。そのため、ユーザーがメールを変更しても、別のユーザーが既にそのメールを持っている場合、とにかくエラーがスローされます。

于 2011-10-02T12:30:23.177 に答える