2010-06-09 69 views
3

即使表單元素不是必需的,是否有辦法讓驗證器觸發?Zend Framework表單元素驗證器 - 即使不需要也驗證字段

如果另一個表單元素(它是幾個單選按鈕)的值具有選定的特定值,那麼我想要驗證texbox的內容(確保不爲空)。現在我通過覆蓋我的表單類的isValid()函數來實現這個功能,並且效果很好。但是,我想將其移至驗證程序或使用回調驗證程序。這是迄今爲止我所擁有的,但它似乎永遠不會被調用,除非我將該字段更改爲我不想在任何時候執行的setRequired(true),僅當其他表單元素的值設置爲特定值。

// In my form class's init function 
$budget = new Zend_Form_Element_Radio('budget'); 
$budget->setLabel('Budget') 
    ->setRequired(true) 
    ->setMultiOptions($options); 

$budgetAmount = new Zend_Form_Element_Text('budget_amount'); 
$budgetAmount->setLabel('Budget Amount') 
->setRequired(false) 
->addFilter('StringTrim') 
->addValidator(new App_Validate_BudgetAmount()); 

//Here is my custom validator (incomplete) but just testing to see if it even gets called. 
class App_Validate_BudgetAmount extends Zend_Validate_Abstract 
{ 
    const STRING_EMPTY = 'stringEmpty'; 

    protected $_messageTemplates = array(
     self::STRING_EMPTY => 'please provide a budget amount' 
    ); 

    public function isValid($value) 
    { 
     echo 'validating...'; 
     var_dump($value); 
     return true; 
    } 
} 

回答

3

看起來,如果你在的地方setRequired(假的),那麼你驗證的使用器setAllowEmpty(假)還是會被調用。所以,我現在有:

$budgetAmount->setLabel('Budget Amount') 
    ->setAllowEmpty(false) 
    ->addFilter('StringTrim') 
    ->addValidator(new App_Validate_BudgetAmount()); 

,它是偉大的工作

+0

如果不是這種'''器setAllowEmpty(真)'''? – Tom 2011-07-21 17:30:07

+0

它的setAllowEmpty(FALSE)與其看起來似乎具有誤導性。 – Chayemor 2013-06-12 20:39:14