1

ユーザー登録ページを設定し、ユーザー名フィールドを検証しています。このフィールドでは、最初にユーザーがまだ存在しないかどうか、次にユーザー名が予約済みでないかどうかを確認します。私の問題は、2つのバリデーターをフォーム要素にアタッチすると、2番目のバリデーターが無視されることです。2番目の検証は、最初の検証が削除された場合にのみ機能します。これはバグですか?もしそうなら、どうすればそれを修正できますか?

バリデーターは次のとおりです。

    $validator = new Zend_Validate_Db_NoRecordExists(
                    array(
                        'table' => 'users',
                        'field' => 'username'
                    )
    );
    $validator->setMessage('Username %value% already exists', Zend_Validate_Db_Abstract::ERROR_RECORD_FOUND);

    $reserved_validator = new Zend_Validate_Db_NoRecordExists(
                    array(
                        'table' => 'reserved_users',
                        'field' => 'name'
                    )
    );
    $reserved_validator->setMessage('Username %value% is not available', Zend_Validate_Db_Abstract::ERROR_RECORD_FOUND);

次に、私が持っている要素について:

            ->addValidator($validator)
            ->addValidator($reserved_validator)
4

2 に答える 2

2

同じタイプの2つのバリデーターを使用する場合に問題があります。あなたがする必要があるのはバリデーターチェーンを追加することです:

$validatorChain = new Zend_Validate();
$validatorChain->addValidator($validator)                            
               ->addValidator($reserved_validator);

そして、要素にチェーンを追加するだけです。

->addValidator($validatorChain);
于 2011-07-02T17:49:10.287 に答える
0

いいえ、これはバグではありません。これは仕様によるものです。複数のタイプのバリデータを使用できますが、それぞれ 1 つのタイプのみです。テーブルの結合が許可されている場合は、DB バリデーターを確認する必要があります。これまで DB バリデーターを使用したことがありません。

更新他の答えに気づきました。そのチェーンはうまくいくはずです。

于 2011-07-02T17:28:23.157 に答える