0

現在、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

4

1 に答える 1