2

我正在尝试用我自己的函数扩展验证类,但它似乎跳过了检查。

我的代码

public function login_validation(){
 $this->load->library('form_validation');
 $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|xss_clean|callback_validate_credentails');
 $this->form_validation->set_rules('password', 'Password', 'trim|required|md5');
    if($this->form_validation->run()){
        #redirect('home');
        //Just to check 
        echo "login success";
    }
    else{
        $this->load->view('view_login');
    }
}

我的 validate credentails 函数是这样的;

public function validate_credentials(){
   //loads model_user
   $this->load->model('model_users');
   //checks if login_validate function in model_users return true
    if($this->model_users->login_validate()){
        return true;
    }
    else{
        //set validation message
        $this->form_validation->set_message('validate_credentails','Incorrect Username/Password');
        return false;
    }

}

如果需要,我在 model_users 中的 login_validate 函数;

public function login_validate(){
    $this->db->where('email', $this->input->post('email'));
    $this->db->where('password', md5($this->input->post('password')));
    $query = $this->db->get('users');
    if($query->num_rows() == 1){
        return true;
    }
    else {
        return false; 
        }

}

这是我第一次遇到这个问题,我做错了吗?我在这上面花了太多时间:(

4

5 回答 5

3

我刚刚找到了解决方案。我需要form_validation按照 Nish 的建议更改类的名称并添加此功能。

class MY_Form_validation extends CI_Form_validation {
    function run($module = '', $group = ''){
        is_object($module) AND $this->CI = &$module;
        return parent::run($group);
    }
} 
于 2012-10-24T13:04:26.623 回答
2

你的回调是callback_validate_credentails(tails),你的函数名是validate_credentials(tials)。可能是错字?

于 2012-10-24T12:53:43.657 回答
1

我认为最好的建议是您的 LOGIN_validation 检查是在您的模型中而不是在表单验证类中......它是不同的东西!

于 2012-10-24T12:45:04.407 回答
0

如果您将该Callback_功能移动到同一个控制器,它将正常工作。

于 2015-11-16T11:37:10.383 回答
0

对于 Codeigniter 3 表单验证回调 只需添加public $CIMY_Form_validation

路径:应用程序/库/MY_Form_validation

class MY_Form_validation extends CI_Form_validation
{
    public $CI;
}

然后在您的控制器构造函数上:

$this->load->library('form_validation');
$this->form_validation->CI =& $this;

这是一个与 HMVC 相关的回调问题。通过这个解决方案,当前控制器作为 $CI 变量分配给 form_validation 库。这将允许您的回调方法正常运行。

于 2021-03-11T04:23:02.867 回答