我看过其他的问题 https://stackoverflow.com/questions/3871460/zend-form-setrequiredtrue-or-addvalidatornotempty/谷歌搜索这个。我的问题是,当我提交带有空文本框的表单时notEmpty
验证器,它不会触发错误。
首先,我想看看我是否理解两者之间的区别notEmpty
and setRequired
。据我了解,notEmpty
如果提交元素且值为空,验证器会给出错误。也就是说,如果 POST 数据(对于表单)中不存在某个条目,那么如果该元素不存在,则不会生成错误required。就像它仅在元素是时才运行set. The setRequired
方法会自动添加一个notEmpty
除非另有说明,否则验证者在幕后。这确保元素的条目必须存在并且不能为空。正确的?
现在,我尝试在我添加的表单中使用此逻辑notEmpty
验证器,像这样:
$username = new Zend_Form_Element_Text('txtUsername');
$username->addValidator(new Zend_Validate_NotEmpty(), true);
其他文本字段也是如此。如果我提交表单而不输入值,我的 POST 数据将如下所示:
(
[txtUsername] =>
[txtPassword] =>
[txtRepeatPassword] =>
)
然而,isValid
仍然评估为true
并且不会生成任何错误消息。为什么?不应该是notEmpty
验证器确定值是空的,因为该元素在 POST 数据中有一个条目?如果我使用setRequired(true)
,它按照我想要的方式工作。当值是空字符串时,它确定用户名不为空,这让我很困惑。 :-)
提前致谢。
我同意这有点令人困惑。原因是所有表单元素都有一个allowEmpty
标志(默认为 true),如果值为空则跳过验证。它以这种方式工作,因为否则,向可选元素添加验证器将是一个真正的痛苦,例如:
$dateOfBirth = new Zend_Form_Element_Text('dob');
$dateOfBirth->setLabel('Date of birth (optional)');
$dateOfBirth->addValidator(new Zend_Validate_Date());
$form->addElement($dateOfBirth);
如果用户选择不输入出生日期,验证总是会失败,因为 '' 不是有效日期。随着allowEmpty
默认情况下打开标志,它会按照您的预期工作(它仅验证输入的日期)。
Calling setRequired(true)
adds a NotEmpty
验证器,但它也设置allowEmpty
标记为假。我建议您坚持这种方法。或者,您也可以通过设置标志来开始工作:
$username = new Zend_Form_Element_Text('txtUsername');
$username->addValidator(new Zend_Validate_NotEmpty());
$username->setAllowEmpty(false);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)