【问题标题】:Zend Framework notEmpty validator setRequiredZend 框架 notEmpty 验证器 setRequired
【发布时间】:2012-07-26 21:57:55
【问题描述】:

我看过其他 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),它会按我的意愿工作。当值为空字符串时,它确定用户名不为空,这让我很困惑。 :-)

提前致谢。

【问题讨论】:

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


    【解决方案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);
    

    【讨论】:

    • 我之前看到了setAllowEmpty,但我认为这只是使用notEmpty 的另一种方式。您使用可选元素提出了一个很好的观点。感谢您的出色回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多