这是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");
}
}
答案 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]”,然后它将作为你的回调函数的第二个参数传递
我注意到的是手册中的示例在控制器中有回调函数,而不在模型中。