我现在正在努力使用 Zend 验证器。使用 Zend 1.12 并且不,我无法升级。我正在尝试验证是否正在传递一个布尔值,但未能验证,仅此而已。所以 true 或 false 都会验证,但 null 不会。看起来很简单,但这是我到目前为止遇到的:
使用 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 - 真,假,真
使用 \Zend_Validate_NotEmpty::PHP - 真,假,真