代码之家  ›  专栏  ›  技术社区  ›  pigfox

Codeigniter回调失败

  •  0
  • pigfox  · 技术社区  · 14 年前

    有人能看到我遗漏了什么吗?

    在文档中:

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

    它指出:

    $this->表单验证->设置规则(“用户名”、“用户名”、“回调用户名”检查);

    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;
        }
    

    根本没有错误,我的方法都不起作用,代码的行为就像不存在一样。

    1 回复  |  直到 14 年前
        1
  •  3
  •   William Linton    14 年前

    首先,我假设您的其余代码是正确的。可能有助于展示整个 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;
            }
    }