Zend 元素和 setRequired、setAllowEmpty、NotEmpty [英] Zend Elements and setRequired, setAllowEmpty, NotEmpty

查看:33
本文介绍了Zend 元素和 setRequired、setAllowEmpty、NotEmpty的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在根据 Zend 表单验证数据数组,其中某些元素是必需的,即 setRequired(true),而其他元素是可选的,即 setRequired(false).

I am validating a data array against a Zend Form where some elements are required, i.e. setRequired(true), and others are optional, i.e. setRequired(false).

当数据数组包含与可选元素匹配的键时,我需要验证才能在此数据上运行.如果没有此类密钥,则不应运行验证.

When the data array contains keys matching the optional elements, I need the validation to run on this data. When there are no such keys, the validation should NOT run.

这听起来很简单,但它让我难住了.在可选元素上,我使用了 setAllowEmpty(false),认为 Zend Validate 会在数组中有匹配键时强制验证,否则忽略它.实际发生的是,即使元素不存在于数组中,Zend Validate 也会显示错误.

This sounds pretty simple but it has got me stumped. On the optional elements I used setAllowEmpty(false), thinking that Zend Validate would force validation when there was a matching key in the array, and ignore it otherwise. What actually happens is that Zend Validate shows an error even if the element does not exist in the array.

有什么想法吗?

更新:

我已经对元素设置的所有可能组合以及一系列不同的 $data[element] 类型进行了一些测试.日志文件如下.

I have run some tests with all possible combinations of the element settings, and a range of different $data[element] types. Log file is below.

我不确定结果是否与文档一致,我还怀疑 setAutoInsertNotEmptyValidator() 的使用会影响简单的 Alnum 验证器的运行方式.(参见下面的测试 3、4、13 和 14).

I'm not sure that the results square up with the documentation, and I suspect also that the usage of setAutoInsertNotEmptyValidator() affects the way that a simple Alnum validator operates. (See tests 3, 4, 13 and 14 below).

有人想检查我的代码吗?我很高兴发送它.

Does someone want to check my code? I'm happy to send it on.

2011-04-19T13:06:59+10:00 调试 (7):允许:org/testform (kim@kimprince.com, admin)2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试(7):元素设置:2011-04-19T13:06:59+10:00 调试(7):==================2011-04-19T13:06:59+10:00 调试 (7): 1: setRequired() [默认: false]2011-04-19T13:06:59+10:00 调试 (7): 2: setAllowEmpty() [默认: true]2011-04-19T13:06:59+10:00 调试 (7): 3: setAutoInsertNotEmptyValidator() [默认值:true]2011-04-19T13:06:59+10:00 DEBUG (7): 4: 添加 Alnum 验证器2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试(7):数据条件:2011-04-19T13:06:59+10:00 调试(7):================2011-04-19T13:06:59+10:00 调试(7):A:数据[元素] = Foo2011-04-19T13:06:59+10:00 调试(7):B:数据[元素]为空白2011-04-19T13:06:59+10:00 调试(7):C:数据[元素]不存在2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试(7):#1===2===3===4====A========B=======C=====2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 1 T |T |T |T : 通过失败失败
2011-04-19T13:06:59+10:00 DEBUG (7):错误 B:值是必需的,不能为空2011-04-19T13:06:59+10:00 DEBUG (7):错误 C:值是必需的,不能为空2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 2 T |T |T |F : 通过失败失败
2011-04-19T13:06:59+10:00 DEBUG (7):错误 B:值是必需的,不能为空2011-04-19T13:06:59+10:00 DEBUG (7):错误 C:值是必需的,不能为空2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 3 T |T |F |T : 通过失败失败
2011-04-19T13:06:59+10:00 调试 (7):错误 B:'' 是一个空字符串2011-04-19T13:06:59+10:00 调试 (7):错误 C:给出的类型无效.预期的字符串、整数或浮点数2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 4 T |T |F |F : pass pass pass
2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 5 T |F |T |T : 通过失败失败
2011-04-19T13:06:59+10:00 DEBUG (7):错误 B:值是必需的,不能为空2011-04-19T13:06:59+10:00 DEBUG (7):错误 C:值是必需的,不能为空2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 6 T |F |T |F : 通过失败失败
2011-04-19T13:06:59+10:00 DEBUG (7):错误 B:值是必需的,不能为空2011-04-19T13:06:59+10:00 DEBUG (7):错误 C:值是必需的,不能为空2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 7 T |F |F |T : 通过失败失败
2011-04-19T13:06:59+10:00 调试 (7):错误 B:'' 是一个空字符串2011-04-19T13:06:59+10:00 调试 (7):错误 C:给出的类型无效.预期的字符串、整数或浮点数2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 8 T |F |F |F : pass pass pass
2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 9 F |T |T |T : pass pass pass
2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 10 F |T |T |F : pass pass pass
2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 11 F |T |F |T : pass pass pass
2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 12 F |T |F |F : pass pass pass
2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 13 F |F |T |T : 通过失败失败
2011-04-19T13:06:59+10:00 调试 (7):错误 B:'' 是一个空字符串2011-04-19T13:06:59+10:00 调试 (7):错误 C:给出的类型无效.预期的字符串、整数或浮点数2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 14 F |F |T |F : pass pass pass
2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 15 F |F |F |T : 通过失败失败
2011-04-19T13:06:59+10:00 调试 (7):错误 B:'' 是一个空字符串2011-04-19T13:06:59+10:00 调试 (7):错误 C:给出的类型无效.预期的字符串、整数或浮点数2011-04-19T13:06:59+10:00 调试 (7):
2011-04-19T13:06:59+10:00 调试 (7): 16 F |F |F |F : pass pass pass

2011-04-19T13:06:59+10:00 DEBUG (7): ALLOWED: org/testform (kim@kimprince.com, admin) 2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): Element Settings: 2011-04-19T13:06:59+10:00 DEBUG (7): ================= 2011-04-19T13:06:59+10:00 DEBUG (7): 1: setRequired() [default: false] 2011-04-19T13:06:59+10:00 DEBUG (7): 2: setAllowEmpty() [default: true] 2011-04-19T13:06:59+10:00 DEBUG (7): 3: setAutoInsertNotEmptyValidator() [default: true] 2011-04-19T13:06:59+10:00 DEBUG (7): 4: add Alnum Validator 2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): Data Conditions: 2011-04-19T13:06:59+10:00 DEBUG (7): ================ 2011-04-19T13:06:59+10:00 DEBUG (7): A: data[element] = Foo 2011-04-19T13:06:59+10:00 DEBUG (7): B: data[element] is BLANK 2011-04-19T13:06:59+10:00 DEBUG (7): C: data[element] does NOT EXIST 2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): # 1===2===3===4=====A=======B=======C===== 2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 1 T | T | T | T : pass FAIL FAIL
2011-04-19T13:06:59+10:00 DEBUG (7): Error B: Value is required and can't be empty 2011-04-19T13:06:59+10:00 DEBUG (7): Error C: Value is required and can't be empty 2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 2 T | T | T | F : pass FAIL FAIL
2011-04-19T13:06:59+10:00 DEBUG (7): Error B: Value is required and can't be empty 2011-04-19T13:06:59+10:00 DEBUG (7): Error C: Value is required and can't be empty 2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 3 T | T | F | T : pass FAIL FAIL
2011-04-19T13:06:59+10:00 DEBUG (7): Error B: '' is an empty string 2011-04-19T13:06:59+10:00 DEBUG (7): Error C: Invalid type given. String, integer or float expected 2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 4 T | T | F | F : pass pass pass
2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 5 T | F | T | T : pass FAIL FAIL
2011-04-19T13:06:59+10:00 DEBUG (7): Error B: Value is required and can't be empty 2011-04-19T13:06:59+10:00 DEBUG (7): Error C: Value is required and can't be empty 2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 6 T | F | T | F : pass FAIL FAIL
2011-04-19T13:06:59+10:00 DEBUG (7): Error B: Value is required and can't be empty 2011-04-19T13:06:59+10:00 DEBUG (7): Error C: Value is required and can't be empty 2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 7 T | F | F | T : pass FAIL FAIL
2011-04-19T13:06:59+10:00 DEBUG (7): Error B: '' is an empty string 2011-04-19T13:06:59+10:00 DEBUG (7): Error C: Invalid type given. String, integer or float expected 2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 8 T | F | F | F : pass pass pass
2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 9 F | T | T | T : pass pass pass
2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 10 F | T | T | F : pass pass pass
2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 11 F | T | F | T : pass pass pass
2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 12 F | T | F | F : pass pass pass
2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 13 F | F | T | T : pass FAIL FAIL
2011-04-19T13:06:59+10:00 DEBUG (7): Error B: '' is an empty string 2011-04-19T13:06:59+10:00 DEBUG (7): Error C: Invalid type given. String, integer or float expected 2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 14 F | F | T | F : pass pass pass
2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 15 F | F | F | T : pass FAIL FAIL
2011-04-19T13:06:59+10:00 DEBUG (7): Error B: '' is an empty string 2011-04-19T13:06:59+10:00 DEBUG (7): Error C: Invalid type given. String, integer or float expected 2011-04-19T13:06:59+10:00 DEBUG (7):
2011-04-19T13:06:59+10:00 DEBUG (7): 16 F | F | F | F : pass pass pass

推荐答案

setRequired() 似乎是一个冗余功能,因为 setAllowEmpty 是几乎一样.我认为这在某个地方作为一个问题进行了讨论.

setRequired() seems to be a redundant feature because setAllowEmpty is pretty the same. I think this is discuessed somewhere as an issue.

然而,除了验证器之外,您还可以使用 setRequired(flag) 来指定一个元素是必需的.默认情况下,此标志为 false.与 setAllowEmpty(flag)(默认为 true)和 setAutoInsertNotEmptyValidator(flag)(true)结合使用> 默认情况下,您可以修改验证过程的行为:

However in addition to validators you can use setRequired(flag) to specify that an element is required. By default this flag is false. In combination with setAllowEmpty(flag), which is true by default, and setAutoInsertNotEmptyValidator(flag), which is true by default, you can modify the behavior of your validation process:

  • 默认情况下,使用默认标志,当您不传递任何值或空字符串时,将跳过验证器并返回 true
  • 默认保留所有标志并使用 setAllowEmpty(false) 将针对此元素的验证器进行验证
  • 默认保留所有标志并使用 setRequired(true) 将添加一个 NotEmpty 验证器.所以如果没有传递任何值,我们会通知用户并阻止其他验证器被执行,因为我们知道这是无效数据
  • by default, using the default flags, when you pass no value or an empty string, validators are skipped and true is returned
  • leaving all flags by default and using setAllowEmpty(false) will validate against the validator for this element
  • leaving all flags by default and using setRequired(true) will add a NotEmpty validator. So if no value is passed, we notify the user and prevent other validators from being executed, because we know this is invalid data

因此 setAllowEmpty(false) 默认保留所有标志将与 setRequired(true) 和 setAutoInsertNotEmptyValidator(false) 相同;由于命名而令人困惑

So setAllowEmpty(false) leaving all flags by default will be the same as setRequired(true) and setAutoInsertNotEmptyValidator(false); this is confusing because of the naming

希望有所帮助;)

这篇关于Zend 元素和 setRequired、setAllowEmpty、NotEmpty的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆