Создание пользовательского правила проверки правильности кода
У меня есть функция в моей форме входа, которая проверяет, соответствуют ли электронные письма и пароль значениям в базе данных, и если он регистрирует пользователя в системе.
Я хотел бы отобразить ошибку проверки, если эта функция возвращает false.
Моя проблема в том, что я не уверен, как это сделать. Сообщение относится к полям пароля и электронной почты, поэтому я бы не хотел, чтобы правило для каждого поля ввода отображало только одно сообщение.
Я попытался использовать flashdata для этого, но он работает только тогда, когда страница обновлена.
Как я могу создать новое правило проверки только для функции $this->members_model->validate_member()
?
$this->form_validation->set_error_delimiters('<div class="error">', '</div>');
$this->form_validation->set_rules('email_address', '"Email address"', 'trim|required|valid_email');
$this->form_validation->set_rules('password', '"Password"', 'trim|required');
if ($this->form_validation->run() == FALSE)
{
$viewdata['main_content'] = 'members/login';
$this->load->view('includes/template', $viewdata);
}
else
{
if($this->members_model->validate_member())
{
Ответы
Ответ 1
Вы используете callback_
в своих правилах, см. обратные вызовы, например.
$this->form_validation->set_rules('email_address', '"Email address"', 'trim|required|valid_email|callback_validate_member');
и добавьте метод в контроллер. Этот метод должен возвращать либо TRUE, либо FALSE
function validate_member($str)
{
$field_value = $str; //this is redundant, but it to show you how
//the content of the fields gets automatically passed to the method
if($this->members_model->validate_member($field_value))
{
return TRUE;
}
else
{
return FALSE;
}
}
Затем вам необходимо создать соответствующую ошибку в случае сбоя проверки
$this->form_validation->set_message('validate_member','Member is not valid!');
Ответ 2
Одним из лучших способов добиться этого является расширение библиотеки проверки подлинности формы CodeIgniters. Предположим, мы хотим создать пользовательский валидатор с именем access_code_unique
для поля access_code
таблицы базы данных users
.
Все, что вам нужно сделать, это создать файл класса с именем MY_Form_validation.php
в каталоге application/libraries
. Метод всегда должен возвращать TRUE
ИЛИ FALSE
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation {
protected $CI;
public function __construct() {
parent::__construct();
// reference to the CodeIgniter super object
$this->CI =& get_instance();
}
public function access_code_unique($access_code, $table_name) {
$this->CI->form_validation->set_message('access_code_unique', $this->CI->lang->line('access_code_invalid'));
$where = array (
'access_code' => $access_code
);
$query = $this->CI->db->limit(1)->get_where($table_name, $where);
return $query->num_rows() === 0;
}
}
Теперь вы можете легко добавить свое новое созданное правило
$this->form_validation->set_rules('access_code', $this->lang->line('access_code'), 'trim|xss_clean|access_code_unique[users]');