我已经看了其他问题/在谷歌上搜索了这个。我的问题是,当我提交带有notEmpty
验证器的空文本框的表单时,它不会触发错误。
首先,我想看看我是否理解notEmpty
和setRequired
之间的区别。据我所知,如果提交了一个元素,并且值为空,notEmpty
验证器会给出一个错误。也就是说,如果POST数据中不存在条目(对于表单),那么如果元素不是必需的,则不会生成错误。就像它只在元素设置为时运行一样。除非另有说明,否则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
标志处于打开状态时,它会按照您的预期工作(它只会在输入日期时验证日期)。
调用setRequired(true)
会添加一个NotEmpty
验证器,但它也会将allowEmpty
标志设置为false。我建议你坚持这种方法。或者,你也可以通过设置标志来上班:
$username = new Zend_Form_Element_Text('txtUsername');
$username->addValidator(new Zend_Validate_NotEmpty());
$username->setAllowEmpty(false);