我现在正在与Zend Validators进行斗争。使用Zend 1.12而不是,我无法升级。我正在尝试并且未能验证是否传递了布尔值,而没有其他任何内容。因此,无论是真还是假都会验证,但无效。看似简单,但这是我到目前为止遇到的情况:
使用setRequired() - false失败但null验证
$myForm = new \Zend_Form();
$myElement = new \Zend_Form_Element('isPrimary');
// set up validation
$myElement->setRequired(true);
$myForm->addElement($myElement);
$trueResult = $myForm->isValid(array('isPrimary' => true)); // true
$falseResult = $myForm->isValid(array('isPrimary' => false)); // false (WTF?)
$nullResult = $myForm->isValid(array('isPrimary' => null)); // false
使用Zend_Validator_InArray() -
...
// set up validation
$myElement->addValidator(
new \Zend_Validate_InArray(
array(
'haystack' => array(true, false)
)
)
);
$myForm->addElement($myElement);
$trueResult = $myForm->isValid(array('isPrimary' => true)); // true
$falseResult = $myForm->isValid(array('isPrimary' => false)); // true
$nullResult = $myForm->isValid(array('isPrimary' => null)); // true (WTF?)
......严格打开 -
$trueResult = $myForm->isValid(array('isPrimary' => true)); // true
$falseResult = $myForm->isValid(array('isPrimary' => false)); // true
$nullResult = $myForm->isValid(array('isPrimary' => null)); // true (WTF?)
使用Zend_Validate_Callback() -
...
$myElement->addValidator(
new \Zend_Validate_Callback(
function ($value) {
return is_bool($value);
}
)
);
$myForm->addElement($myElement);
$trueResult = $myForm->isValid(array('isPrimary' => true)); // true
$falseResult = $myForm->isValid(array('isPrimary' => false)); // true
$nullResult = $myForm->isValid(array('isPrimary' => null)); // true (AHHHHHGGGGGHHH)
经过一些调试后,当我传入null并且只是验证时,似乎从未调用回调。这些验证器发生了什么?
编辑:
还尝试了\ Zend_Validate_NotEmpty -
$trueResult = $myForm->isValid(array('isPrimary' => true)); // true
$falseResult = $myForm->isValid(array('isPrimary' => false)); // false
$nullResult = $myForm->isValid(array('isPrimary' => null)); // true
使用\ Zend_Validate_NotEmpty :: BOOLEAN - true,false,true
使用\ Zend_Validate_NotEmpty :: BOOLEAN和NULL - true,false,true
使用\ Zend_Validate_NotEmpty :: PHP - true,false,true
答案 0 :(得分:0)
我设法在验证器之前使用过滤器使其工作。如果有人遇到这个问题,这里有一个解决方案:
$myElement->addFilter(new \Zend_Filter_Callback('is_bool'))
->addValidator(
new \Zend_Validate_NotEmpty(\Zend_Validate_NotEmpty::BOOLEAN)
);
Zend_Filter_Boolean似乎也没有正常工作(可能会使用正确的选项)所以我只是使用了is_bool()的回调。
如果有人知道的话,我想知道为什么验证器甚至没有被调用null值。