2011-07-02 5 views
1

사용자 등록 페이지를 설정 중이며 사용자가 이미 존재하지 않는지 먼저 확인하는 사용자 이름 필드에서 유효성을 검사하고 둘째로 사용자 이름이 예약 된 것이 아닌지 확인합니다. . 내 문제는 두 번째 유효성 검사기를 양식 요소에 연결하면 두 번째 유효성 검사를 무시하는 것입니다. 두 번째 유효성 검사는 첫 번째 유효성 검사가 제거 된 경우에만 작동합니다. 이거 버그 야? 그렇다면 어떻게 해결할 수 있습니까?Zend Validation (Zend_Validate_Db_NoRecordExists)에 문제가 있음

아래는 검증 있습니다

$validator = new Zend_Validate_Db_NoRecordExists(
        array(
         'table' => 'users', 
         'field' => 'username' 
        ) 
    ); 
    $validator->setMessage('Username %value% already exists', Zend_Validate_Db_Abstract::ERROR_RECORD_FOUND); 

    $reserved_validator = new Zend_Validate_Db_NoRecordExists(
        array(
         'table' => 'reserved_users', 
         'field' => 'name' 
        ) 
    ); 
    $reserved_validator->setMessage('Username %value% is not available', Zend_Validate_Db_Abstract::ERROR_RECORD_FOUND); 

그런 다음 요소에 내가 가지고 :

  ->addValidator($validator) 
      ->addValidator($reserved_validator) 

답변

2

동일한 유형의 유효성 검사기를 두 개 사용할 때 문제가 발생합니다. 당신이해야 할 일은 Validator 체인을 추가하는 것입니다 :

$validatorChain = new Zend_Validate(); 
$validatorChain->addValidator($validator)        
       ->addValidator($reserved_validator); 

그리고 요소에 체인을 추가하기 만하면됩니다.

->addValidator($validatorChain); 
0

가 없음이 버그가 아닙니다, 이것은 의도적으로 설계된 것입니다, 내가 말할 것입니다. 여러 유형의 유효성 검사기를 가질 수 있지만 각각 하나의 유형 만 가질 수 있습니다. 테이블을 조인 할 수 있으면 DB 유효성 검사기를 살펴 봐야합니다. 지금까지 DB 유효성 검사기를 사용한 적이 없습니다.

업데이트 그냥 다른 답변을 발견, 그 트릭을해야합니다.