首先,我假设您的其余代码是正确的。可能有助于展示整个
User
上课。
您可能需要检查CodeIgniter是否允许您在同一规则中调用回调函数和prepping/validator函数。如果不允许,你可以打电话
trim
,
require
xss_clean
在回调函数中。
不过,我要说,如果允许的话,这绝对是
形式:
$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.')');
打电话
功能。相反,你在给
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;
}
}