【问题标题】:Zend_Filter_Input with Zend_Validate_InArray-Validator which has an array as its needleZend_Filter_Input 和 Zend_Validate_InArray-Validator,它有一个数组作为它的指针
【发布时间】:2012-11-28 12:50:46
【问题描述】:

我正在使用 Zend_Filter_Input 过滤和验证我的数据。对于一个字段(性别),我使用 Zend_Validate_InArray 来验证,如果值在

array('m', 'w');

到目前为止一切顺利。
在运行我的 UnitTests 时,我注意到空数组也是性别的有效值。
为了分析这个,我写了如下代码:

$genderArray = array('m', 'w');
$needle = array();
if(in_array($needle, $genderArray)) {
    Zend_Debug::dump('is in array');
} else {
    Zend_Debug::dump('is not in array');
}

$validator = new Tueks_Validate_InArray($genderArray);
if ($validator->isValid($needle)) {
    Zend_Debug::dump('is in array');
} else {
    Zend_Debug::dump('is not in array');
}

两次,我都得到'不在数组中'。

但是当我使用以下代码时:

$child = new Tueks_Placereport_Child();
$child->setGender($needle);
$child->validate();

一切正常(--> array() 是 array('m', 'w') 的一部分)?!?

这是我的验证方法中的相关部分:

$genderArray = array('m', 'w');
$filters = array();
$validators = array('gender'=> 
                     array('presence'=> 'required',
                           new Tueks_Validate_InArray($genderArray)
                          )
                   );
$input = new Zend_Filter_Input($filters, $validators, $this->_data);

Tueks_Validate_InArray 与 Zend_Validate_InArray 相同,但有其他消息。 我没有看到问题,为什么在使用 Zend_Filter_Input 时,一个空数组是一个有效值。 希望你能帮助我。

【问题讨论】:

  • 顺便说一句,如果您实际上提供了一个工作代码 sn-p,您可能会更早得到答案。如果您提到缺少的类名和字段,则很难首先找出问题:)

标签: php arrays zend-validate zend-filter


【解决方案1】:

这实际上是 Zend 框架中的 a bug,目前尚未修复。由于Zend_Filter_Input 已随 Zend Framework 2 停产,我高度怀疑它是否会停产。但是,票证上附有一个补丁可以解决这个问题。

我也做了一点调试,可以追踪到Zend_Filter_Input中的_validateRule方法:

在那里你可以找到这个代码块:

if (!is_array($field)) {
    $field = array($field);
}
[...]
foreach ($field as $key => $value) {
[...]
    if (!$validatorChain->isValid($value)) {

$field 包含字段的值。可以看到,如果传入一个非数组的值,就会被放入一个数组中,这样就进入了foreach块。但是,如果您传递一个空数组,则$field 将保留array(0) {},因此不会输入整个foreach 块。因此不会执行单个验证(也不会执行非空检查)。

我也试图找到一种解决方法,但它们都相当尴尬。因此,最简单的解决方法是检查 $value 是否为空数组。

【讨论】:

  • 嘿,谢谢你的回答 ;-) 在我的 unitTest 中,我不久前删除了这个 empty-Array-Test 并且认为没有开发人员会交出一个空数组 ;-)
猜你喜欢
  • 2011-02-21
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多