26

假设我创建了一个这样的文本元素:

$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))也不起作用 - 它双重验证,给出两条错误消息。

有任何想法吗?

谢谢!

4

10 回答 10

19

设置此“站点范围”的更简单方法是可能在引导程序或基础 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);
?>
于 2009-01-20T18:25:25.393 回答
16

试一试:

$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.');

关键是验证器上的“真”,如果你将它设置为真,它会杀死它之后的其他验证。如果您添加了多个验证方法,但将其设置为 false,它将验证所有方法。

于 2009-01-20T02:30:28.317 回答
10

Zend_Form 将所需的验证错误设置为 'isEmpty',因此您可以使用 setErrorMessages() 覆盖它的消息。例如:

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

它对我有用,使用 ZF 1.11

于 2012-11-14T04:58:10.700 回答
9

尝试

->addValidator('Digits', false);

或者

->addValidator('Digits');

您假设要检查 Digits 无论如何都必须具有字符串长度。

另外,我喜欢做一些这样的自定义错误消息:

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

这允许您“获取”验证器,然后“设置”它的属性。

于 2009-01-20T02:58:32.783 回答
5

试试下面的。

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

这对我有用。

于 2009-08-12T09:33:35.700 回答
1

但是试试这个:

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

如果留空并提交,它将给出两条消息bar & ' ' is an empty string。它来自 setRequired(true) 的第二条消息就是问题所在

于 2009-01-20T18:20:41.863 回答
1

如果你把:

$element->setRequired(false);

验证根本不起作用,您必须定义:

$element->setAllowEmpty(false);

为了获得正确的验证行为。

于 2010-08-11T13:30:15.913 回答
1

尝试这个..

$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 验证器设置自定义错误消息。

于 2009-10-26T04:07:06.150 回答
0

一个小问题。这段代码:

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

如果任一验证失败,将生成两条错误消息。第一次失败后不应该停止吗?

于 2009-01-20T02:49:29.527 回答
0

使用带有zend_validate.php的zend 翻译器

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

然后根据您的需要进行相应修改

于 2011-03-22T12:03:40.330 回答