Создание пользовательского правила проверки правильности кода

У меня есть функция в моей форме входа, которая проверяет, соответствуют ли по электронной почте и паролю значения в базе данных и если он регистрирует пользователя в системе.

Я хотел бы показать ошибку проверки, если эта функция возвращает 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()) { 

Вы используете 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's 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!'); 

Одним из лучших способов добиться этого является расширение библиотеки проверки подлинности CodeIgniter. Предположим, мы хотим создать пользовательский валидатор с именем access_code_unique для поля access_code users таблицы базы данных.

Все, что вам нужно сделать, это создать файл класса с именем MY_Form_validation.php в 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]');