2010-08-13 156 views
2

我需要基於另一個字段的值爲表單字段設置一些驗證。例如,如果專業是Doctor,那麼要求專業不是空白('')或沒有('none')。Zend Framework:條件驗證

​​

我如何使以下依賴於專業?

$this->validator->field('specialty')->inArray(array_keys($specialtySelectOptions)) 
              ->message('Invalid salutation.'); 

回答

1

我經常走這條路

$f = new My_Form(); 

if($f->isValid($_POST)) { 
    // extra validation 
    if($f->getValue('profession') === 'Dr.') { 
    $specialty = $f->getValue('specialty'); 
    if($specialty === '' || $specialty === 'none') { 
     $f->markAsError(); 
     $f->specialty->addError('error_msg'); 
    } 
    } 

    if(!$f->isErrors()) { 
    $f->save(); 
    } 
} 
5

您可以在表單類中擴展isValid()方法,例如,

/** 
* @param array $data The data from the request to validate 
*/ 
public function isValid($data) 
{ 
    $this->checkSpecialityForProfession($data); 
    return parent::isValid($data) 
} 

protected function checkSpecialityForProfession($data) 
{ 
    if($data['profession'] === 'Dr.') { 
     $validator = new Zend_Validate_InArray(array(
      'Heart', 
      'Lungs', 
      'Feet', 
      'Nose', 
      ) 
     ); 

     $this->getElement('specialty')->addValidator($validator); 
    } 

}