2010-11-06 115 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