1

ZF2 RecordExists メソッドに問題があります。問題のあるケース/シナリオを説明します。

表: ユーザー 列: ID、メールアドレス、ウェブサイト名

Sample Records:
        1, user1@email.com, 1site.com
        2, user2@email.com, 1site.com
        3, user3@email.com, 2site.com
        4, user4@email.com, 2site.com
        5, user5@email.com, 1site.com
        6, user6@email.com, 3site.com
        7, user7@email.com, 4site.com

既に存在する状態に次のスニペットを使用しています。

//Check that the email address exists in the database
$validator = new Zend\Validator\Db\RecordExists(
    array(
        'table' => 'users',
        'field' => 'emailaddress'
    )
);

if ($validator->isValid($emailaddress)) {
    // email address appears to be valid
} else {
    // email address is invalid; print the reasons
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}

上記のスニペットによると、user1@email.com は再登録できません。なぜなら、そのメールアドレスはテーブルに存在するからです。でも、2site.comに登録したいです。user1@email.com は 1site.com にあるためです。そのため、user1@email.com は 1site.com に再度登録できません。ただし、user1@email.com は 2site.com に登録できます。それはどのように可能ですか?あなたの提案を教えてください。

4

1 に答える 1

1

これを行うには2つの方法があります。

最初に、レコードの除外メソッドを使用します。ここでは、websitenameフィールド値のレコードを除外します。

Zend \ Validator \ Db\RecordExistsおよびZend\Validator \ Db \ NoRecordExistsは、where句を文字列として提供するか、キーが「field」の配列を提供することにより、テーブルの一部を除いてデータベースをテストする手段も提供します。そして「価値」。

$email     = 'user@example.com';
$clause    = $db->quoteInto('email = ?', $email);
$validator = new Zend\Validator\Db\RecordExists(
    array(
        'table'   => 'users',
        'field'   => 'username',
        'exclude' => $clause
    )
);

if ($validator->isValid($username)) {
    // username appears to be valid
} else {
    // username is invalid; print the reason
    $messages = $validator->getMessages();
    foreach ($messages as $message) {
        echo "$message\n";
    }
}

次に、独自のカスタムバリデーターを作成します。AbstractDBクラスを拡張し、 RecordExistsクラスの指示に従って独自のクラスを作成する必要があります。独自のcustクラスで、独自のクエリを定義し、それをisValid関数に渡すことができます。

除外するカスタムバリデーターの反対側を作成しました。これにはインクルードが含まれます。includeは予約語です。これで、機能するかどうかを確認してください。 こちらで確認してください

これに関するより多くの読み

ガイドライン1

独自のカスタムバリデーターを作成するには、既存のバリデーターを参照してくださいカスタムバリデーターギルドライン

チェーンバリデーター2

于 2013-01-25T14:13:08.933 に答える