4

を使用する場合Zend_Form、入力が空白のままになっていないことを検証する唯一の方法は、

$element->setRequired(true);

これが設定されておらず、要素が空白の場合、検証は要素に対して実行されていないように見えます。

を使用するsetRequired()と、要素には標準のNotEmptyバリデーターが自動的に与えられます。このバリデーターのエラーメッセージには、「値は空ですが、空でない値が必要です」というメッセージが表示されます。このメッセージを変更したいと思います。現時点では、Zend_Validate_NotEmptyクラスを変更してこれを行っていますが、これは少しハッキーです。

理想的には、自分のクラス(から派生Zend_Validate_NotEmpty)を使用して、空でないチェックを実行できるようにしたいと思います。

4

5 に答える 5

4

私はこのようにしました(ZF 1.5):

$name = new Zend_Form_Element_Text('name');
$name->setLabel('Full Name: ')
     ->setRequired(true)
     ->addFilter('StripTags')
     ->addFilter('StringTrim')
     ->addValidator($MyNotEmpty);

そのため、addValidator() は興味深い部分です。メッセージは「エラー メッセージ ファイル」に設定されます (すべてのカスタム メッセージを 1 つのファイルにまとめるため)。

$MyNotEmpty = new Zend_Validate_NotEmpty();
$MyNotEmpty->setMessage($trans->translate('err.IS_EMPTY'),Zend_Validate_NotEmpty::IS_EMPTY);

お役に立てれば...

于 2008-08-30T11:26:57.207 に答える
3

デフォルトでは、setRequired(true) は isValid() に、NonEmpty 検証がまだ存在しない場合は追加するように指示します。この検証は isValid() が呼び出されるまで存在しないため、メッセージを設定することはできません。

最も簡単な解決策は、 isValid() が呼び出される前に手動で NonEmpty 検証を追加し、それに応じてメッセージを設定することです。

$username = new Zend_Form_Element_Text('username');
$username->setRequired(true)
         ->addValidator('NotEmpty', true, array('messages' => array('isEmpty' => 'Empty!')));
于 2008-10-10T15:31:30.320 に答える
2

NotEmpty バリデーターを追加し、独自のメッセージを追加します。

// In the form class:
$username = $this->createElement('text', 'username');
$username->setRequired();  // Note that this seems to be required!
$username->addValidator('NotEmpty', true, array(
    'messages' => array(
        'isEmpty' => 'my localized err msg')));

要素で setRequired() も呼び出さない限り、NotEmpty バリデーターはトリガーされないように見えることに注意してください。

コントローラー (または任意の場所) で、 $form->setTranslator($yourTranslator) を呼び出して、ページに出力されるときにエラー メッセージをローカライズします。

于 2008-11-25T17:31:29.323 に答える
1

エラー メッセージを変更します。

于 2008-08-29T17:54:26.970 に答える
0

私が見る限り、エラー メッセージを変更しても、特定のエラー メッセージを変更する方法はありません。さらに、マニュアルでは、これは Zend_Form に属する関数のように見えますが、Zend_Form のインスタンスで使用するとメソッドが見つかりません。

そして、使用例は本当に素晴らしいでしょう。

于 2008-08-29T18:13:46.473 に答える