2010-08-13 157 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); 
    } 

}