假设我创建了一个这样的文本元素:
$firstName = new Zend_Form_Element_Text('firstName');
$firstName->setRequired(true);
更改默认错误消息的最佳方法是:
值为空,但为非空值 是必需的
自定义消息?我在某处读到要替换消息,只需使用addValidator(...,代替(无setRequired),如下所示:
$firstName = new Zend_Form_Element_Text('firstName');
$firstName->addValidator('NotEmpty', false, array('messages'=>'Cannot be empty'));
但在我的测试中,这不起作用 - 它根本不验证 - 它将传递一个空文本字段。使用两者(addValidator('NotEmp .. + setRequired( ())同时也不起作用 - 它会双重验证,给出两个错误消息。
有什么想法吗?
谢谢!
答案 0 :(得分: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);
?>
答案 1 :(得分: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.');
关键是验证器上的“true”,如果你将其设置为true,它将杀死其后的其他验证。如果添加多个验证方法,但将其设置为false,则会验证所有方法。
答案 2 :(得分:10)
Zend_Form将所需的验证错误设置为'isEmpty',因此您可以使用setErrorMessages()覆盖其消息。例如:
//Your Required Element
$element->setRequired(true)->setErrorMessages(array(
'isEmpty'=>'Please fill this field'
));
对我来说,使用ZF 1.11
答案 3 :(得分:9)
尝试
->addValidator('Digits', false);
或
->addValidator('Digits');
你认为要检查数字,它必须有一个字符串长度。
另外,我喜欢这样做一些自定义错误消息:
$firstName->getValidator('NotEmpty')->setMessage('Please enter your first name');
这允许您“获取”验证器,然后“设置”它的属性。
答案 4 :(得分:5)
请尝试以下操作。
$subjectElement->setRequired(true)->addErrorMessage('Please enter a subject for your message');
这对我有用。
答案 5 :(得分:1)
但试试这个:
$firstName->setRequired(true)
->addValidator('NotEmpty', false, array('messages' => 'bar'))
->addValidator('Alpha', false, array('messages'=>'Must contain only letters'));
如果留空并提交,则会发出两条消息 bar &amp; ''是一个空字符串。它来自setRequired(true)的第二条消息就是问题
答案 6 :(得分: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验证器设置自定义错误消息。
答案 7 :(得分:1)
如果你把:
$element->setRequired(false);
验证根本不起作用,你必须定义:
$element->setAllowEmpty(false);
以获得验证的正确行为。
答案 8 :(得分:0)
一个小问题。这段代码:
$zipCode->setLabel('Postal Code')
->addValidator('StringLength', true, array( 5, 5 ) )
->addErrorMessage('More than 5')
->addValidator('Digits', true)
->addErrorMessage('Not a digit');
如果验证失败,将生成错误消息。是不是应该在第一次失败后停止?
答案 9 :(得分:0)
使用带有 zend_validate.php 的zend翻译器
ZendFramework-1.11.3\resources\languages\en\Zend_Validate.php and then modify this file how you need
然后根据您的需要进行修改