Zend_Form -> Nicely change setRequired() validate message

2022-08-30 16:27:06

假设我创建了一个文本元素,如下所示:

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

有什么想法吗?

谢谢!


答案 1

设置此“站点范围”的更简单方法是在引导程序中执行以下操作,或者可能是基本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);
?>

答案 2

试一试:

$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,则它将验证所有方法。


推荐