Проверка формы Codeigniter: прекратить проверку следующих правил, если правило не выполняется - PullRequest
0 голосов
/ 12 сентября 2018

Это мой метод контроллера для обработки пользовательского ввода

function do_something_cool()
{
  if ($this->form_validation->run() === TRUE)
  {
    // validation passed process the input and do_somthing_cool
  }
  // show the view file
  $this->load->view('view_file');

Правила проверки таковы:

<?php

$config = array(

  'controller/do_something_cool' => array(
    array(
      'field' => 'email',
      'label' => 'Email',
      'rules' => 'trim|required|valid_email|callback_check_email_exists',
     )
   )
 );

Моя проблема: если пользовательский ввод не является действительным адресом электронной почты,Правило валидации не останавливает выполнение следующего правила, в данном случае это функция обратного вызова.Поэтому, даже если электронная почта недействительна, я получаю сообщение об ошибке для обратного вызова check_email_exists ().

Есть ли какая-либо опция в CI, чтобы прекратить проверку других правил в случае сбоя правила?

1 Ответ

0 голосов
/ 13 сентября 2018

Из метода system/libraries/Form_validation.php _prepare_rules(),

«Обратным вызовам» присваивается самый высокий приоритет (всегда вызывается), затем следует «обязательный» (вызывается, если обратные вызовы не дали сбоя), а затем каждое следующее правило зависит от предыдущего прохождения.

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

Для приведенного выше случая я изменил свою функцию обратного вызова следующим образом

function check_email_exists($email)
{
   if ($this->form_validation->valid_email($email) === FALSE)
   {
        $this->form_validation->set_message('check_email_exists', 'Enter a valid email');
        return FALSE;
    }
    // check if email_exists in the database
    // if FALSE, set validation message and return FALSE
    // else return TRUE
}
...