Codeigniter回调失败
任何人都可以看到我失踪?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;
}
有没有错误可言,没有我的方式工作,代码的行为就像它不在那里。
首先,我假设你的其他代码是正确的。它可能有助于显示整个User
类。
您可能想要检查CodeIgniter是否允许您在相同的规则中调用回调函数和准备/验证函数。如果不允许,可以在回调函数中调用trim
,require
和xss_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;
}
}
我看不到你可以在哪里添加回调函数。 – helle 2010-11-06 22:39:48
@helle:该函数是一个回调函数。如果你阅读他引用的网页,你会看到'callback_username_check'设置'username_check'为回调。 – 2010-11-06 22:45:00