0

フォームの次の部分を検討してください

    $name = new Zend_Form_Element_Text('name');
    $name->setLabel('name: ')
                             ->setRequired(true)
                             ->addValidator($empty)
                             ->addValidator($alpha)
             ->setDecorators($newdecorators);
    $this->addElement($name);

$empty と $alpha を次のように定義しました。

        $empty = new Zend_Validate_NotEmpty();
        $empty->setMessage('some text',  Zend_Validate_NotEmpty::IS_EMPTY);

        $alpha = new Zend_Validate_Alpha();
        $alpha->setMessage('some text',Zend_Validate_Alpha::NOT_ALPHA);

今私の質問:

このコードでは、入力が空のときに二重検証メッセージが表示されます。最初にカスタム メッセージ、次に: '' は空の文字列です setRequired を削除すると、空のバリデータは実行されません。どうしてこれなの?setRequired に errorMessage を追加すると $alpha エラー メッセージが上書きされるため、setRequired は使用したくありません。

thx、J

4

1 に答える 1

1

これは、以前の検証のいずれかが失敗した場合でも、要素に割り当てられているすべてのバリデータに対してチェックすることが既定の動作であるためです。

幸いなことに、これを防ぐのは非常に簡単です。このaddValidatorメソッドでは、2 番目のパラメーター$breakChainOnFailureを渡すことができますtrue

したがって、指定した例では、2 番目のパラメーターを true に設定するだけで済みます。

$name = new Zend_Form_Element_Text('name');
$name->setLabel('name: ')
                         ->setRequired(true)
                         ->addValidator($empty, true)
                         ->addValidator($alpha, true)
         ->setDecorators($newdecorators);
$this->addElement($name);

また、空の文字列を入力した場合に表示されるエラー メッセージは 1 つだけです。

詳細については、Validator Chainsに関する Zend Framework のドキュメント を参照してください。

于 2012-06-04T21:08:46.690 に答える