У меня есть простая страница регистрации, где небольшая проверка, существует ли номер CPF или нет, должна быть проверена из базы данных вместе с некоторыми правилами проверки. Однако после отправки формы из правил проверки работает только функция обратного вызова, а остальные правила игнорируются, как требуется | trim ... et c.
В моем контроллере (правила проверки):
if ($this->input->post()) {
$this->form_validation->set_rules('cpf','CPF','trim|required|numeric|max_length[15]|callback_checkIfExist[cpf]');
if ($this->form_validation->run()==TRUE) {
$rb = random_bytes(8);
$randPass = bin2hex($rb);
// TODO: Store hashed password in db
// mail new password for login
// login and update password
}
}
$this->load->view($page,$data);
В моем контроллере (функция обратного вызова):
public function checkIfExist($cpf){
if (!$data['employee']=$this->HomeModel->getEmployeeData($cpf)) {
$this->form_validation->set_message('checkIfExist','No data found with this {field}');
return false;
} else {
return true;
}
}
В моей модели:
public function getEmployeeData($cpf){
# returning only 1 row of particular employee
$this->db->where('e_cpf',$cpf);
$this->db->where('e_b_id',Me::$bid);
$qry = $this->db->get('employees');
if ($row = $qry->row()) {
return $row;
}
}
В моем представлении:
<form class="user" action="" method="post">
<div class="form-group">
<input type="text" name="cpf" class="form-control form-control-user <?=(form_error('cpf'))?'is-invalid':'is-valid'?>" id="exampleInputEmail" aria-describedby="emailHelp" placeholder="Enter CPF Number ..." value="<?=set_value('cpf')?>">
<p class="p-2"><?=form_error('cpf')?></p>
</div>
<input class="btn btn-primary btn-user btn-block" type="submit" name="register" value="Register">
</form>