2013-07-08 33 views
0

我現在正在用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

回答

0

我設法讓它在驗證器之前使用過濾器工作。如果有人運行到這個問題,這裏是一個解決方案:

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

Zend_Filter_Boolean似乎沒有合適的工作之一(可能會與正確的選項),所以我只是用回調is_bool()。

我很想知道爲什麼如果有人知道驗證器甚至沒有被調用空值。