codeigniter回调不起作用?

时间:2013-02-25 08:50:40

标签: php codeigniter

这是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");
    }

}

2 个答案:

答案 0 :(得分: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后缀,如callback_email_check和回调方法email_check并检查。在CodeIgniter Callbacks

了解更多信息

答案 1 :(得分:0)

我让自己像这样陷入混乱,几乎淹死了一整天。这是问题所在。我正在使用模型,事实证明回调所需的功能在模型中不起作用。解决这个问题:

确保您用于回调的功能位于控制器中而不是模型中。

它就像魔法一样。我无法理解为什么,但它修复了我的回调案例。

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

以下是手册所说的内容:

  

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

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