web-dev-qa-db-ja.com

Zend_Form-> setRequired()検証メッセージを適切に変更

次のようなテキスト要素を作成するとします。

$firstName = new Zend_Form_Element_Text('firstName');
$firstName->setRequired(true);

デフォルトのエラーメッセージを次のように変更する最良の方法は何ですか:

値は空ですが、空でない値が必要です

カスタムメッセージに?メッセージを置き換えるには、次のように、代わりにaddValidator(...、(NO setRequired)を使用する)をどこかで読みました。

$firstName = new Zend_Form_Element_Text('firstName');
$firstName->addValidator('NotEmpty', false, array('messages'=>'Cannot be empty'));

しかし、私のテストでは、これは機能しません-まったく検証されません-空のテキストフィールドで渡されます。両方を使用する(addValidator ( 'NotEmp .. + setRequired(true))同時にも機能しません-二重検証し、twoエラーメッセージ。

何か案は?

ありがとう!

26
dittonamed

この「サイト全体」を設定する簡単な方法は、bootstrapまたはベースzend_controllerで次のことを行うことです:

<?php    
$translateValidators = array(
                        Zend_Validate_NotEmpty::IS_EMPTY => 'Value must be entered',
                        Zend_Validate_Regex::NOT_MATCH => 'Invalid value entered',
                        Zend_Validate_StringLength::TOO_SHORT => 'Value cannot be less than %min% characters',
                        Zend_Validate_StringLength::TOO_LONG => 'Value cannot be longer than %max% characters',
                        Zend_Validate_EmailAddress::INVALID => 'Invalid e-mail address'
                    );
    $translator = new Zend_Translate('array', $translateValidators);
    Zend_Validate_Abstract::setDefaultTranslator($translator);
?>
19
John B

これを試してみてください:

$firstName = new Zend_Form_Element_Text('firstName');
$firstName->setLabel('First Name')
          ->setRequired(true)
          ->addValidator('NotEmpty', true)
          ->addErrorMessage('Value is empty, but a non-empty value is required.');

重要なのは、バリデーターで「true」をtrueに設定すると、その後の他の検証が強制終了されることです。複数の検証メソッドを追加し、それをfalseに設定すると、すべてのメソッドが検証されます。

16
typeoneerror

Zend_Formは、必要な検証エラーを「isEmpty」として設定するため、setErrorMessages()を使用してメッセージをオーバーライドできます。例えば:

//Your Required Element
$element->setRequired(true)->setErrorMessages(array(
'isEmpty'=>'Please fill this field'
));

ZF 1.11を使用して、私にとってはうまくいきました

10
Jose Arandi

試してみてください

->addValidator('Digits', false);

または

->addValidator('Digits');

ディジットをチェックするには、とにかく文字列の長さが必要であると想定します。

また、次のようなカスタムエラーメッセージを表示するのも好きです。

$firstName->getValidator('NotEmpty')->setMessage('Please enter your first name');

これにより、バリデーターを「取得」してから、そのプロパティを「設定」することができます。

9
typeoneerror

次のことを試してください。

$subjectElement->setRequired(true)->addErrorMessage('Please enter a subject for your message');

これは私からうまくいきました。

5
James Robinson

しかし、これを試してください:

$firstName->setRequired(true)
          ->addValidator('NotEmpty', false, array('messages' => 'bar'))
          ->addValidator('Alpha', false, array('messages'=>'Must contain only letters'));

空のままにして送信すると、2つのメッセージが表示されますbar& ''は空の文字列です。 setRequired(true)からの2番目のメッセージが問題です

1
dittonamed

あなたが置く場合:

$element->setRequired(false);

検証はまったく機能しません。次のように定義する必要があります。

$element->setAllowEmpty(false);

検証の正しい動作を取得するため。

1
armandfp

これを試して..

$ausPostcode = new Zend_Form_Element_Text('aus_postcode'); $ausPostcode->setLabel('Australian Postcode')
->setRequired(true)
->addValidator('StringLength', false, array(4, 4))
->addValidator(new Zend_Validate_Digits(), false)
->getValidator('digits')->setMessage('Postcode can only contain digits');

これにより、Digitsバリデーターに対してのみカスタムエラーメッセージが設定されます。

1
JP.

zend_validate.php fromでzendトランスレータを使用します

ZendFramework-1.11.3\resources\languages\en\Zend_Validate.php and then modify this file how you need

必要に応じて変更します

0
max4ever

1つの小さな問題。このコード:

$zipCode->setLabel('Postal Code')
        ->addValidator('StringLength', true, array( 5, 5 ) )
        ->addErrorMessage('More than 5')
        ->addValidator('Digits', true)
        ->addErrorMessage('Not a digit');

いずれかの検証が失敗した場合、両方のエラーメッセージが生成されます。最初が失敗した後に停止することになっていないのですか?

0
dittonamed