1

这是 codeigniter 中的一个简单的登录验证脚本。我无法理解这个问题。我已经阅读了用户指南,但回调不起作用。

public function form_validation()
{
    $this->load->library('form_validation');
    $this->form_validation->set_rules('username', 'Username', 'required|trim        |alpha_numeric');
    $this->form_validation->set_rules('password', 'Password', `enter code here` 'required|trim |xss_clean');
    $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|xss_clean|callback_validate');
    if ($this->form_validation->run()) {
        echo "validated but not logged";
    } else {
        $this->load->view('errors/formerror');

    }
}

public function validate()
{
    $this->load->model('model_users');
    if ($this->model_users->can_login()) {
        echo "Logged";
    } else {
        $this->form_validation->set_message('validate', "Incorrect username/password");
    }

}
4

2 回答 2

1
public function form_validation()
{
    $this->load->library('form_validation');
    $this->form_validation->set_rules('username', 'Username', 'required|trim|alpha_numeric');
    $this->form_validation->set_rules('password', 'Password', 'required|trim |xss_clean');
    $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|xss_clean|callback_email_check');
    if ($this->form_validation->run()) {
        echo "validated but not logged";
    } else {
        $this->load->view('errors/formerror');
    }
}

public function email_check($email)
{
    $this->load->model('model_users');
    if ($this->model_users->can_login($email)) {
        echo "Logged";
        return true;
    } else {
        $this->form_validation->set_message('email_check', "Incorrect username/password");
        return false;
    }
}

添加_check后缀likecallback_email_check和回调方法email_check并检查。在这里找到更多CodeIgniter 回调

于 2013-02-25T08:52:38.160 回答
0

我把自己弄得一团糟,几乎淹死了一整天。这就是问题所在。我正在使用模型,结果发现回调所需的函数在模型中不起作用。要解决这个问题:

确保您用于回调的函数在控制器中而不是模型中。

它像魔术一样工作。我不知道为什么,但它解决了我的回调案例。

添加检查后缀并没有太大的区别,因为手册没有特别提到后缀。前缀回调是我知道不应该被遗漏的。我有几个没有 _check 后缀的回调。

以下是手册的内容:

要调用回调,只需将函数名称放入规则中,并以“callback_”作为规则前缀。如果你需要在你的回调函数中接收一个额外的参数,只需在方括号之间的函数名之后正常添加它,如:“callback_foo[bar]”,然后它将作为回调函数的第二个参数传递

我注意到的是手册中的示例在控制器中而不是模型中具有回调函数。

于 2013-02-25T10:02:58.563 回答