2016-10-23 1 views
0

codeigniter 3.1.1을 사용하고 있습니다. 나는 codeigniter에 익숙하지 않고 나는 알아낼 수있는 문제에 부딪쳤다. 내 콜백 함수는 필요한 규칙이 건너 뛰고 필드가 비어있는 경우에도 콜백 함수가 실행된다는 점에서 필요한 유효성 검사에 영향을 미치는 것 같습니다. 여기필요한 유효성 검사에 영향을주는 코드 서명자 콜백

$validate_data = array(

     array(

      'field' => 'pages', 
      'label' => 'No of pages', 
      'rules' => 'trim|required|integer|callback_regex_pages' 
      ) 
); 

    $this->form_validation->set_rules($validate_data); 
    $this->form_validation->set_error_delimiters('<p class="text-danger">','</p>'); 

내 콜백 함수

public function regex_pages(){ 

if(!preg_match('/^\d(\d)?(\d)?$/',$this->input->post('pages'))){ 

    $this->form_validation->set_message('regex_pages', 'The {field} is not valid!'); 

    return false; 

    }else{ 

    return true; 

    } 
    }//end method regex_pages 

내 코드의이이 방식으로 작동 내 많은 콜백 중 하나 단지입니다. 내가 콜백 규칙을 제거하는 경우, 필요한 규칙이

실행됩니다 이것은 내가 당신을 제안

My output

+0

내가 그들 중 하나가 false를 반환 여부'$ this-> form_validation-> 실행()'모든 규칙을 테스트 할 것이라고 믿는다 그것을 – developer

+0

의 입력, 쇼 샘플은 무엇입니까. 즉, 필요한 규칙이 false를 반환하더라도 regex_pages가 호출되는 것을 멈추지 않습니다. – DFriend

답변

0

아래에있는 내 출력은 "MY_form_validation"의지라는 새로운 라이브러리를 제작하여 양식 유효성 검사 라이브러리를 확장하는 것이다 "CI_form_validation"을 확장하고 "libraries"폴더에 저장합니다. 그런 다음 모든 콜백 함수를 MY_form_validation에 넣으면 전역 콜백을 사용할 수 있지만 접두사 "콜백"으로 규칙을 설정할 필요가 없습니다. 다음은 예제입니다.

$validate_data = array(

    array(

     'field' => 'pages', 
     'label' => 'No of pages', 
     'rules' => 'trim|required|integer|regex_pages' 
     ) 

); 필드의 값이 유효인지 아닌지

$this->form_validation->set_rules($validate_data); 
$this->form_validation->set_error_delimiters('<p class="text-danger">','</p>'); 

그래서 MY_form_validation에서 당신은 메시지를 상관없이 설정 기능

public function regex_pages($value_to_be_validated){ 

if(!preg_match('/^\d(\d)?(\d)?$/',$value_to_be_validated)){ 

$this->set_message('regex_pages', 'The {field} is not valid!'); 

return false; 

}else{ 

return true; 

} 
+0

그게 해결책 인 것처럼 보이지만 내 모델 클래스를로드 할 수 없거나 '$ this-> db'를 사용할 수 없기 때문에 이메일 주소가 있는지 확인하는 것과 같이 데이터베이스에 대한 액세스가 필요한 규칙을 형성하지는 않습니다. – facilitator

+0

아 – facilitator

+0

get_instance() 함수를 호출하여 데이터베이스 또는 원하는 것을로드 할 수 있습니다. 그래서, 만약 당신이 $ CI = get_instance(); $ CI-> load-> database()에 의해 데이터베이스를 호출 할 것이다. 모델을로드하려면 간단한 유형을 입력하십시오. $ CI-> load-> model ('your_name_model'); $ CI-> your_model_name-> your_method();를 입력하여 모델을 호출 할 수 있습니다. – Dumitru

1

를 만들 것입니다.

public function regex_pages($value){ 

    //set message anyway 
    $this->form_validation->set_message('regex_pages', 'The {field} is not valid!'); 

    //the rule will be available for any field, not just for pages 
    return (bool) preg_match('/^\d(\d)?(\d)?$/',$value); 

} 

또한 Codeigniter regex_match 규칙을 사용할 수 있습니다. http://www.codeigniter.com/user_guide/libraries/form_validation.html?highlight=form%20validation#CI_Form_validation

'rules' => 'trim|required|integer|regex_match[//]' 
+0

아무것도 반환 (true 또는 false)하고 작동합니다. – Ali

관련 문제