2013-04-18 71 views
1

我做使用表單驗證庫和我的自定義回調的笨表單驗證。笨回調不工作

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 function username_check($username) 
{ 
    // do some stuffs here 
} 

當我將方法設置爲私有方式時,它不起作用。

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

爲什麼私人方法的回調不起作用?

爲什麼我需要這個? CI中的控制器

公共方法是通過類似例子的網址訪問上述

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

我不想訪問的回調方法公開。

+0

您需要了解PHP文檔內的可見一點點.. http://php.net/manual/en/language.oop5.visibility.php – Svetoslav

+0

你是不要在同一個類中調用它。:)你的Form v alidator正在訪問應該是公共當前類功能.. – Svetoslav

+0

見我在@Svetlio答案評論 - 無論這些解決方案將是合適的。 –

回答

2

回調函數必須是公開的。笨表單驗證類訪問你的函數在電流控制器,因此它可能不會是私人..

去解決你的問題,你可以想想你擴展了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

另一種選擇是前面加上下劃線回調函數名,這是一個小特定CI-「絕招」做一個公開的方法從URI不可訪問。 'username_check'將變成'_username_check',並且回調名稱將使用雙下劃線:'callback__username_check'。 –

+0

@Cryode,它的工作原理。 –

0

私人功能只能由該類的一個對象被訪問。該功能僅在其自己的類中可見。瞭解更多關於變量/函數範圍here

+0

但是你仍然在沒有物體障礙的情況下使用它。你不能直接訪問它。 –