2010-11-06 112 views
0

任何人都可以看到我失蹤?Codeigniter回調失敗

我正在使用Codeigniter v1.72。

在DOC:

http://codeigniter.com/user_guide/libraries/form_validation.html

它指出:

$這 - > form_validation-> set_rules( '用戶名', '用戶名', 'callback_username_check');

function username_check($str) 
    { 
     if ($str == 'test') 
     { 
      $this->form_validation->set_message('username_check', 'The %s field can not be the word "test"'); 
      return FALSE; 
     } 
     else 
     { 
      return TRUE; 
     } 
    } 

在我班上用戶擴展控制器

我在功能寄存器:

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callback_username_check('.$username.')'); 

I have also tried 

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callback_username_check'); 

而且

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callback_username_check['.$username.']'); 


    function username_check($str) 
    { 
      $this->load->model('User_model', '', TRUE); 
      $taken = $this->User_model->countUsername($str); 

      if($taken) 
      { 
       $this->form_validation->set_message('username_check', 'That username is already taken'); 
       return FALSE; 
      } 
      else 
       return TRUE; 
    } 

有沒有錯誤可言,沒有我的方式工作,代碼的行爲就像它不在那裏。

+0

我看不到你可以在哪裏添加回調函數。 – helle 2010-11-06 22:39:48

+0

@helle:該函數是一個回調函數。如果你閱讀他引用的網頁,你會看到'callback_username_check'設置'username_check'爲回調。 – 2010-11-06 22:45:00

回答

3

首先,我假設你的其他代碼是正確的。它可能有助於顯示整個User類。

您可能想要檢查CodeIgniter是否允許您在相同的規則中調用回調函數和準備/驗證函數。如果不允許,可以在回調函數中調用trimrequirexss_clean

我會說,雖然,如果它是允許的,那麼這絕對是RIGHT形式:

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callback_username_check');

這是錯誤

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callback_username_check['.$username.']');

這也是錯了

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callback_username_check('.$username.')');

看到,那行,你不應該實際上是CALLING功能。相反,你傳遞一個字符串到set_rules()函數,它將解析並找出你想用作回調的函數。

正如文檔所述,無論username的值是什麼,都將作爲參數傳遞給您的回調函數。

編輯:

我正想說試試這個:

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|callback_username_check');

但我不認爲它會奏效。相反,這應該工作:

function username_check($str) 
    { 
     $this->load->model('User_model', '', TRUE); 
     $taken = $this->User_model->countUsername($str); 

     if($taken) 
     { 
      $this->form_validation->set_message('username_check', 'That username is already taken'); 
      return FALSE; 
     } 
     else if(!$str) { 
      // This is functioning as the required rule 
      return FALSE; 
     } 
     else { 
      $str = trim($str); 
      $str = $this->input->xss_clean($str); 
      return $str; 
     } 
} 
+0

這是行不通的: – pigfox 2010-11-06 23:38:34

+0

謝謝!!! 這是行不通的: $ this-> form_validation-> set_rules('username','Username','callback_username_check'); 但現在我不能調用trim,require和xss_clean。 任何想法如何做到這一點? – pigfox 2010-11-06 23:40:25

+0

完美!這工作!謝謝! – pigfox 2010-11-06 23:56:27