0

我现在正在努力使用 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 - 真,假,真

4

1 回答 1

0

我设法在验证器之前使用过滤器使其工作。如果有人遇到这个问题,这里有一个解决方案:

$myElement->addFilter(new \Zend_Filter_Callback('is_bool'))
    ->addValidator(
        new \Zend_Validate_NotEmpty(\Zend_Validate_NotEmpty::BOOLEAN)
    );

Zend_Filter_Boolean 似乎也不能正常工作(可能使用正确的选项),所以我只是使用了 is_bool() 的回调。

如果有人知道,我很想了解为什么验证器甚至没有被调用 null 值。

于 2013-07-08T21:28:41.043 回答