Zend Framework notEmpty validator setRequired


Zend Framework notEmpty validator setRequired

我已经看了其他问题/在谷歌上搜索了这个。我的问题是,当我提交带有notEmpty验证器的空文本框的表单时,它不会触发错误。

首先,我想看看我是否理解notEmptysetRequired之间的区别。据我所知,如果提交了一个元素,并且值为空,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);