如何使用Zend Validators验证是否存在布尔值

时间:2013-07-08 14:57:14

标签: php validation zend-framework

我现在正在与Zend Validators进行斗争。使用Zend 1.12而不是,我无法升级。我正在尝试并且未能验证是否传递了布尔值,而没有其他任何内容。因此,无论是真还是假都会验证,但无效。看似简单,但这是我到目前为止遇到的情况:

使用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 - true,false,true

使用\ Zend_Validate_NotEmpty :: PHP - true,false,true

1 个答案:

答案 0 :(得分:0)

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

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

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

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