我正在尝试使用我自己的函数扩展验证类,但它似乎跳过了检查。
我的代码
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');
}
}
我的验证凭证功能就是这样;
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;
}
}
这是我第一次遇到这个问题,我做错了吗?我花了太多时间在这上面:(
答案 0 :(得分:3)
我刚刚找到了解决方案。我需要更改Nish建议的form_validation
类的名称并添加此功能。
class MY_Form_validation extends CI_Form_validation {
function run($module = '', $group = ''){
is_object($module) AND $this->CI = &$module;
return parent::run($group);
}
}
答案 1 :(得分:2)
您的回调是callback_validate_credentails
(尾巴),您的函数名称是validate_credentials
(tials)。错字可能?
答案 2 :(得分:1)
我认为最好的建议是您的LOGIN_validation检查是否在您的MODEL而不是表单验证类... 它的不同之处!
答案 3 :(得分:0)
如果将Callback_
函数移动到同一个控制器,它将正常工作。
答案 4 :(得分:0)
对于 Codeigniter 3 表单验证回调 只需在 MY_Form_validation
中添加public $CI
路径:应用程序/库/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 库之前。这将使您的回调方法正常运行。