Zend_Form - >很好地改变setRequired()验证消息

时间:2009-01-20 02:10:29

标签: php zend-framework zend-form

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

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

有什么想法吗?

谢谢!

10 个答案:

答案 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

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