我正在编写一个方法,使用POST
发布的AJAX
变量将用户添加到数据库中的某个课程,但我无法使回调正常工作:
public function enroll()
{
$package = array();
$this->load->library('form_validation');
$this->form_validation->set_rules('course', 'Vak', 'required|callback_not_enrolled');
$fields = array("course");
if ($this->form_validation->run($this) === FALSE) {
$errors = array();
$success = array();
foreach ($fields as $field) {
$error = form_error($field);
if ($error !== "") {
$errors[$field] = $error;
} else {
$success[$field] = True;
}
}
$package["field_errors"] = $errors;
$package["field_success"] = $success;
$package["success"] = False;
} else {
$package["database"] = $this->course_model->enroll_user($this->data["user"], $this->input->post("course"));
$package["success"] = True;
}
echo json_encode($package);
}
我编写了回调not_enrolled
来检查用户是否尚未注册到数据库。请注意,我不能使用is_unique
,因为我必须测试两个字段的组合唯一性(因此只有一个或两个单独的字段不起作用)并且用户的id
不是包含在表单中(因为它是Code Igniter会话的一部分)。
回调函数:
public function _not_enrolled($course)
{
$exists = ($this->user->is_enrolled($course, $this->data["user_id"]) != False);
if ($exists != False) {
$this->form_validation->set_message("not_enrolled", "Already enrolled");
return False;
} else {
return True;
}
}
最后来自模型的方法is_enrolled
:
public function is_enrolled($course, $user=False) {
if($user==False){
$user = $this->data["user_id"];
}
$this->db->select()->from("course_participant")->where("user_id", $user)->where("course_id", $course);
$query = $this->db->get();
return($query->num_rows()>0);
}
通过调用var_dump($this->_not_enrolled($existing_course_id));
我知道回调函数和模型中的方法都正常工作,因为它正确返回true
。
当我var_dump
$package
数组或validation_errors()
时,我没有收到任何验证错误,除非它说无法访问与您的字段名称相对应的错误消息Vak(not_enrolled) 的