2013-07-31 2 views
0

몇 번이나이 문제가 발생했지만 해결책을 찾지 못했지만 해결 방법은 없습니다.유효성 검사 호출 사이의 동적 규칙 유효성 검사

내가 10 개의 작업을 여러 개 가지고 있다고 가정 해 봅시다. 주어진 답변에 따라 유효성 검사 규칙이 다릅니다.

foreach($jobs as $job){ 

    if(!$this->Job->validates()){ 
     echo 'Oh no, it didn't validate'; 
    } 

} 

내가 아는 주요 문제는 첫 번째 작업에서만 트리거 된 규칙을 설정 한 경우입니다.

if($this->data['Job']['type'] == 'special'){ 
    $this->validator()->add('special_field', 'notEmpty', array(
     'rule' => array('notEmpty'), 
     'message' => 'Please provide data' 
    )); 
} 

다른 9에도 적용됩니다. 따라서 규칙은 호출간에 지속됩니다. 따라서 규칙이 존재할 경우 제거 할 수 있습니다.

if($this->data['Job']['type'] == 'special'){ 
    $this->validator()->add('special_field', 'notEmpty', array(
     'rule' => array('notEmpty'), 
     'message' => 'Please provide data' 
    )); 
}else{ 
    $this->validator()->remove('special_field', 'notEmpty'); 
} 

그러나 제거하려고 시도 할 때 규칙이 없으면 치명적인 오류가 발생합니다.

beforeValidate 시작시 동적 규칙을 제거하기 전에 규칙을 제거하기 전에 규칙을 확인하는 방법이 있습니까?

답변

0

흥미로운 문제.

나는 이것을 테스트하지 않은,하지만 하나가 사용할 수있는 것 같다

$this->validator()->remove('special_field'); 

이 필드에 대한 모든 규칙을 제거합니다.

+0

기타 답변은 정확합니다. 치명적인 오류가 없으면 throw하기 때문에 제거하기 전에 규칙이 존재하는지 확인해야합니다. – MichaelMc

+0

예. 나는 모든 규칙을 제거 할 때 오류가 없다고 말하고자했다. – savedario

1

ModelValidator::getField 메서드를 사용하여 필드의 모든 규칙을 가져 와서 특정 규칙이 있는지 확인하는 데 사용할 수 있습니다. See.