Zend Framework notEmpty验证器setRequired

时间:2012-07-28 12:35:06

标签: php zend-framework zend-form zend-form-element

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

首先,我想知道我是否理解notEmptysetRequired之间的区别。据我了解,notEmpty验证器在提交元素且值为空时给出错误。也就是说,如果POST数据中没有条目(对于表单),那么如果该元素不是必需,则不会生成错误。喜欢它只在元素 set 时运行。除非另有说明,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),它会按照我的要求运作。我只是想知道,当值为空字符串时,它确定用户名不为空。 : - )

提前致谢。

1 个答案:

答案 0 :(得分: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);

如果用户选择不输入他们的DOB,这将始终无法验证,因为''不是有效日期。默认情况下,allowEmpty标志处于启用状态,它可以正常工作(它只会验证输入一个日期的日期)。

调用setRequired(true)会添加NotEmpty验证程序,但它也会将allowEmpty标记设置为false。我建议你坚持这种方法。或者,您也可以通过设置标志来开始工作:

$username = new Zend_Form_Element_Text('txtUsername');
$username->addValidator(new Zend_Validate_NotEmpty());
$username->setAllowEmpty(false);