使用Zend Validate Float和特定的语言环境

时间:2009-12-12 07:12:44

标签: zend-framework validation zend-form

 $text = new Zend_Form_Element_Text();
            $ValidateRange =  new Zend_Validate_Between(0, 999999.99);
            $ValidateFloat = new Zend_Validate_Float();
            $ValidateFloat->setLocale(new Zend_Locale('de_AT'));
            $ValidateRange->setMessage('Please enter the amount between [0-9999] ');
            $textValidateFloat->setMessage('Please enter the amount properly');                  
            $text->addValidator($ValidateRange);
            $text->addValidator($ValidateFloat);

如果输入12,23之类的值,上面的代码就可以了。如果我们输入12.23,表单没有显示任何错误消息。我们如何显示错误消息。请帮我 。提前谢谢......

1 个答案:

答案 0 :(得分:3)

查看Zend / Validate / Float代码,它总是检查您定义的语言环境 english:

if (!Zend_Locale_Format::isFloat($value, array('locale' => 'en')) &&
    !Zend_Locale_Format::isFloat($value, array('locale' => $this->_locale))) {

因此,您需要自己扩展或重写此验证器,删除'locale'=>'en'部分。

编辑:

你的验证器,扩展Zend_Validate_Float,看起来像这样:

public function isValid( $value )
{
    if ( !parent::isValid($value) ) return false;

    if (!Zend_Locale_Format::isFloat($value, array('locale' => 'de_AT'))) {
        $this->_error(self::NOT_FLOAT);
        return false;
    }
    return true;
}