-1

这是我处理用户输入的控制器方法

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 中是否有任何选项可以停止检查其他规则?

4

1 回答 1

1

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
}
于 2018-09-13T08:53:48.010 回答