我現在正在用Zend Validators掙扎。使用Zend 1.12而不是,我無法升級。我試圖和未能驗證一個布爾值被傳遞,沒有別的。所以無論是真或假都會驗證,但無效。看似簡單,但這裏是我碰到迄今爲止:如何使用Zend驗證器驗證布爾值的存在
用setRequired() - 假的失敗,但空驗證
$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 ::布爾值 - 真,假,真
使用\ Zend_Validate_NotEmpty ::布爾和NULL - 真的,假的,true
using \ Zend_Validate_NotEmpty :: PHP - true,false,true