Zend Framework notEmpty验证器setRequired

And*_*708 4 php zend-framework zend-form zend-form-element

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

首先,我想看看我是否明白之间的差别notEmptysetRequired.据我所知,notEmpty如果提交了一个元素并且值为空,验证器会给出错误.也就是说,如果一个条目不存在于POST数据存在(形式),那么它不如果不是元素产生一个错误需要.喜欢它只在元素设置时运行.除非另有说明,否则该setRequired方法将notEmpty在幕后自动添加验证器.这可确保元素的条目必须存在且不能为空.正确?

现在,我尝试在我添加notEmpty验证器的表单中使用此逻辑,如下所示:

$username = new Zend_Form_Element_Text('txtUsername');
$username->addValidator(new Zend_Validate_NotEmpty(), true);
Run Code Online (Sandbox Code Playgroud)

对于其他文本字段也是如此.如果我在没有输入值的情况下提交表单,我的POST数据如下所示:

(
    [txtUsername] => 
    [txtPassword] => 
    [txtRepeatPassword] => 
)
Run Code Online (Sandbox Code Playgroud)

但是,isValid仍然会计算true并且不会生成错误消息.为什么?notEmpty由于元素在POST数据中有条目,验证器是否应该确定值为空?如果我使用setRequired(true)它,它的工作方式我想要的.我只是想知道,当值为空字符串时,它确定用户名不为空.:-)

提前致谢.

Tim*_*ain 6

我同意这有点令人困惑.原因是所有表单元素都有一个allowEmpty标志(默认为true),如果值为空,则跳过验证.它以这种方式工作,因为否则,将验证器添加到可选元素将是一个真正的痛苦,例如:

$dateOfBirth = new Zend_Form_Element_Text('dob');
$dateOfBirth->setLabel('Date of birth (optional)');
$dateOfBirth->addValidator(new Zend_Validate_Date());
$form->addElement($dateOfBirth);
Run Code Online (Sandbox Code Playgroud)

如果用户选择不输入他们的DOB,这将始终无法验证,因为''不是有效日期.随着allowEmpty它的作品,你会期望标志在默认情况下(只验证时已输入一个日期).

调用setRequired(true)添加NotEmpty验证器但它也将allowEmpty标志设置为false.我建议你坚持这种方法.或者,您也可以通过设置标志来获得工作方式:

$username = new Zend_Form_Element_Text('txtUsername');
$username->addValidator(new Zend_Validate_NotEmpty());
$username->setAllowEmpty(false);
Run Code Online (Sandbox Code Playgroud)