Zend框架notEmpty验证setRequired(Zend Framework notEmpt

2019-09-20 09:02发布

我已经看了看其他的问题 Google搜索这个/。 我的问题是,当我提交表单与具有空文本框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) ,它的工作原理我多么希望。 它只是用脑子弄乱,这决定了当值是一个空字符串的用户名不是空的。 :-)

提前致谢。

Answer 1:

我同意这是一个有点混乱。 其原因是,所有的表单元素都有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);


文章来源: Zend Framework notEmpty validator setRequired