如果设置了Zend_Translate,则Zend_Form无法设置自定义元素验证消息

时间:2012-07-31 22:27:57

标签: php zend-framework zend-form translation

如果将Zend_Translator应用于Zend_Form,则无法设置自定义元素验证消息。 请看我的例子......

class App_Form extends Zend_Form 
{

    public function init() 
    {

        parent::init();

        //let's create and set translator for our form
        $translations = array(
            Zend_Validate_NotEmpty::IS_EMPTY => 'Value is required for this field.' //just one line of translations as example
        );
        $adapter = new Zend_Translator('array', $translations);
        $this->setTranslator($adapter);

        //now we're going to add some text element
        $element = new Zend_Form_Element_Text('firstname');
        $element
            ->setRequired(true)
            ->setFilters(array('StringTrim'))
            ->addValidator('NotEmpty')
        ;

        //now we're overriding error message for key with name Zend_Validate_NotEmpty::IS_EMPTY
        $element->getValidator('NotEmpty')->setMessage('Please enter your first name.', Zend_Validate_NotEmpty::IS_EMPTY);
        $this->addElement($element);

        if (!$this->isValid(array('firstname' => ''))) {
            print_r($this->getErrorMessages());
            //we'll still get "Value is required for this field." message
            //if we will try to disable translator we'll get correct message "Value is required for this field."
        }

    }

}

调用Zend_Form::getErrorMessages()方法时会发生此错误。 此方法使用已翻译的消息模板覆盖当前消息模板。

因此,如果不修改Zend_Validate_Abstract

,似乎无法完成此任务

有什么想法吗?

0 个答案:

没有答案