4

私は他の質問を見てきました/これをグーグルで検索しました。私の問題は、バリデーターを持つ空のテキストボックスでフォームを送信すると、notEmptyエラーがトリガーされないことです。

まず、 と の違いを理解しているかどうかを確認したいと思いnotEmptyますsetRequired。私が理解しているようにnotEmpty、要素が送信され、値が空の場合、バリデーターはエラーを返します。つまり、エントリが POST データ (フォーム用) に存在しない場合、要素が必須でなくてもエラーは生成されませ。要素が設定されている場合にのみ実行されるように。このメソッドは、特に指示がない限り、舞台裏でsetRequired自動的にバリデーターを追加します。notEmptyこれにより、要素のエントリが存在する必要があり、空であってはなりません。正しい?

ここで、notEmptyバリデーターを追加したフォームでこのロジックを使用しようとしました。

$username = new Zend_Form_Element_Text('txtUsername');
$username->addValidator(new Zend_Validate_NotEmpty(), true);

他のテキストフィールドも同様です。値を入力せずにフォームを送信すると、POST データは次のようになります。

(
    [txtUsername] => 
    [txtPassword] => 
    [txtRepeatPassword] => 
)

ただし、isValid引き続き評価されtrue、エラー メッセージは生成されません。なんで?notEmpty要素が POST データにエントリを持っているため、バリデーターは値が空であると判断すべきではありませんか? を使用するsetRequired(true)と、希望どおりに機能します。値が空の文字列の場合、ユーザー名が空ではないと判断するのは私の心を混乱させます。:-)

前もって感謝します。

4

1 に答える 1

7

これは少し紛らわしいことに同意します。その理由は、すべてのフォーム要素にallowEmptyフラグ(デフォルトではtrue)があり、値が空白の場合は検証をスキップするためです。そうしないと、オプションの要素にバリデーターを追加するのが非常に面倒になるため、このように機能します。

$dateOfBirth = new Zend_Form_Element_Text('dob');
$dateOfBirth->setLabel('Date of birth (optional)');
$dateOfBirth->addValidator(new Zend_Validate_Date());
$form->addElement($dateOfBirth);

''は有効な日付ではないため、ユーザーがDOBを入力しないことを選択した場合、これは常に検証に失敗します。デフォルトでallowEmptyフラグをオンにすると、期待どおりに機能します(フラグが入力された日付のみを検証します)。

呼び出すとバリデーターがsetRequired(true)追加されますが、フラグもfalseにNotEmpty設定されます。allowEmptyこのアプローチに固執することをお勧めします。または、フラグを設定して作業を開始することもできます。

$username = new Zend_Form_Element_Text('txtUsername');
$username->addValidator(new Zend_Validate_NotEmpty());
$username->setAllowEmpty(false);
于 2012-07-28T13:04:20.667 に答える