現在、Zend Validators に苦労しています。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?)
... strict をオンにして -
$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