2

다른 필드의 값을 기반으로 양식 필드에 대한 유효성을 설정해야합니다.Zend Framework : 조건부 유효성 검사

예를 들어 직업이 의사 인 경우 공백 ('') 또는 없음 ('없음')이 아닌 전문 분야가 필요합니다.

$professionOptions = array(
     ''  => 'Choose Profession', 
     'Dr.' => 'Dr.', 
     'zzz' => 'zzz', 
     'None' => 'None'); 
$this->validator->field('profession')->inArray(array_keys($professionOptions)) ->message('Invalid profession.'); 


$specialtySelectOptions = array(
      ''  => 'Choose Specialty', 
      'Heart' => 'Heart', 
      'Lungs' => 'Lungs', 
      'Feet' => 'Feet', 
      'Nose' => 'Nose'); 

나는 직업에 대해 어떻게 의존합니까?

$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); 
    } 

} 
관련 문제