2013-04-18 3 views
1

Form Validation Library와 사용자 정의 콜백을 사용하여 CodeIgniter에서 폼 유효성 검사를하고 있습니다.비공개 메소드의 codeigniter 콜백이 작동하지 않습니다.

public function insert_user() 
{ 
    if($this->input->post('submit')) { 
     // load form validation library 
     $this->load->library('form_validation'); 

     // configurations 
     $config = array(
      array(
       'field' => 'username', 
       'label' => 'Username', 
       'rules' => 'required|callback_username_check' 
      ) 
     ); 
     $this->form_validation->set_rules($config); 

     // .... continue .... 
    } 
} 

메서드가 public이면 메서드가 예상대로 작동합니다.

public function username_check($username) 
{ 
    // do some stuffs here 
} 

메서드를 비공개로 설정하면 작동하지 않습니다.

private function username_check($username) 
{ 
    // do some stuffs here 
} 

개인용 메서드의 콜백이 작동하지 않는 이유는 무엇입니까?

왜 내가 필요한가? CodeIgniter는 컨트롤러에서

공공 방법은 내가 공개적으로 액세스 할 수있는 콜백 메서드를 원하지 않는

http://example.com/controller_name/username_check/blabla

위의 예와 같은 URL에 액세스 할 수 있습니다.

+0

당신은 당신이 http://php.net/manual/en/language.oop5.visibility.php – Svetoslav

+0

있습니다 .. PHP 문서 내부의 가시성에 대해 조금 읽을 필요 같은 클래스 안에서 호출하지 마십시오. :) Your Form v alidator는 공개되어야하는 현재 클래스 함수에 액세스하고 있습니다. – Svetoslav

+0

@Svetlio 응답에 대한 내 의견보기 - 해당 솔루션 중 어느 것이 적합 할 것입니다. –

답변

2

콜백 함수는 공개 여야합니다. CodeIgniter의 폼 검증 클래스 액세스 비공개하지 않을 수 있도록 현재의 컨트롤러에서 함수 ..에

이 .. 당신이 My_form_validation 당신에게 CI_Form_validation 클래스를 확장에 대해 생각하여 문제를 해결 그런

class MY_Form_validation extends CI_Form_validation 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    function username_check($str) 
    { 
     /* your code */ 
    } 

} 

를 이동하려면 당신의 당신은 단지 설정해야합니다 확인 ..

  'rules' => 'required|username_check' 
+5

또 다른 옵션은 콜백 함수 이름에 밑줄을 앞에 붙이는 것입니다. 이것은 URI에서 공용 메서드를 액세스 할 수 없게하는 작은 CI 관련 "트릭"입니다. 'username_check'는'_username_check'이 될 것이고, 콜백 이름은'callback__username_check'라는 두 개의 밑줄을 사용할 것입니다. –

+0

@Cryode, 작동합니다. –

0

개인 기능은 클래스의 개체에서만 액세스 할 수 있습니다. 이 함수는 자체 클래스에서만 볼 수 있습니다. 변수/기능 범위에 대해 자세히 알아보기 here

+0

하지만 여전히 개체 인스턴스 없이는 접근하고 있습니다. 직접 액세스 할 수 없습니다. –

관련 문제