用Zend_Form给确认密码的表单设置自定义的错误消息

以下是最初的代码,它可以验证两次输入的密码是否相同,但用的是默认的错误消息

$password = $this->createElement('password','password');
$password->setLabel('Password: *')
->addValidator('StringLength', false, array(6, 60))
->setRequired(true);
$confirmPassword->setLabel('Confirm Password: *')
->addValidator("identical" , true, array('password' ))
->setRequired(true);

Zend_Validate_Identical默认的错误消息提示是"* The two given tokens do not match",我想改成自定义的消息,比如:“Your passwords doesn't match.”
我首先找到是zf的文档,在这个页面上 http://framework.zend.com/manual/en/zend.form.elements.html#zend.form.el... , 针对 addValidator函数,有这样的描述:

Note: 提供定制的校验错误消息
有些开发者可能想为校验器提供定制的错误消息。 Zend_Form_Element::addValidator() 的 $options 参数让你通过提供 'messages' 键并把它设置为键/值对(用来设置消息模板)的数组来完成。你需要知道特定校验器的各种各样的校验错误类型的错误代码。
稍好的选择是在表单中使用 Zend_Translate_Adapter。错误代码通过缺省的错误装饰器自动传递给适配器,然后你可以通过为你的校验器的各种错误代码设置翻译来指定自己的错误消息字符串。

但是它提示什么是"各种各样的校验错误类型的错误代码"也没说哪里去找这些错误代码! 看来这一段文档真的需要改进一下!

在Google上找了半个小时,终于找到一个方法:即在使用Zend_Validate_Identical之前,先声明并且自定义它的错误信息:

$identical = new Zend_Validate_Identical();
$identical ->setMessage("Your passwords do not match.");
$identical ->setToken('password');
$confirmPassword = $this->createElement('password','confirmPassword');
$confirmPassword->setLabel('Confirm Password: *')
->addValidator($identical )
->setRequired(true);

代码看起来还是比较直观的。

Chinese, Simplified(简体中文)

评论

$confirmPassword->setLabel('Confirm Password: *')
->addValidator("identical",true,array("token"=>"password"))
->addErrorMessage('The passwords do not match')
->setRequired(true);

谢谢,我也是找了那些错误 的key好久,都没找到,zendframework api 太垃圾了,跟没有没什么区别 ,很多地方都说得不明不白!

不客气~ 其实还好, zf文档里这些不完善的地方有时确实令人感到沮丧, 所以需要我们多下一些功夫, 更努力才行~ 如果大家都把自己的发现分享出来, zf这个社区的文档就会更丰富, 更兴旺拉!

添加新评论