2012-05-01 4 views
0

데이터베이스의 도시/도시 필드에 간단한 유효성 검사를 사용하고 있습니다. 이것은 모델에 적용되었습니다. 도시와 마을을 모두 볼 수 있으므로 최소 3 자 길이가 필요하며 비워 둘 수 없습니다.CakePHP 모델 유효성 확인, 가능한 2의 1 필드에 텍스트가 있음을 확인하십시오.

그러나 사람들이이 필드에 대한 양식을 채울 때 그들은 도시 나 도시를 가지게됩니다. 유효성 검사에서이 필드 중 하나만 완료해야하는 체크를 어떻게 만듭니 까? 나는 분명히 'allowEmpty'=> true 일 수 없으므로 어떻게 구현합니까?

유효성 검사 규칙 :

 'town' => array(   
      'rule' => array('minLength', 3),        
      'allowEmpty' => false, 
      'message' => 'Must have town' 
     ) , 

       'city' => array(   
      'rule' => array('minLength', 3),        
      'allowEmpty' => false, 
      'message' => 'Must have city' 
     ) , 

어떤 제안?

function eitherOr(&$data, $orFields = array()) { 
    foreach ($orFields as $orField => $orValue) { 
     if (!empty($orValue)) { 
      unset($this->validationErrors[key($data)]); 
     } 
    } 
    return true; 
} 

이 그런 다음 유효성 검사 규칙에 추가 :

+0

[이 게시물보기] (http://stackoverflow.com/questions/9719033/validation-for-at-least) -one-phone-number-is-required-in-cakephp) – Ross

답변

1

당신이 뭔가를 당신의 AppModel이에 사용자 지정 유효성 검사 규칙을 만들 수 있습니다.

var $validate = array(
    'town' => array(
    'empty' => array(
     'rule' => 'allowEmpty' 
    ), 
    // other rules 
), 
    'city' => array(
    // other rules 
    'eitherOr' => array(
     'rule' => array('eitherOr', array('town')) 
    ) 
) 
); 

기본적으로, 당신이이 경우에 (두 번째 PARAM을 전달 필드의 배열에서 값을 확인합니다, array('town')이 마을 필드를 확인합니다. 값이 비어 있지 않으면, 어떤 검증을 제거합니다 도시에서 오류가 발생하여 통과 할 수 있습니다. 규칙은 유효성 검사 오류가 제거 될 수 있도록 마지막으로 이동해야합니다.