【问题标题】:CodeIgniter form validation, cannot get validation errorCodeIgniter 表单验证,无法获取验证错误
【发布时间】:2013-01-17 09:26:21
【问题描述】:

我正在尝试使用 CodeIgniters 表单验证库,尽管我的验证规则似乎有效,但每当我调用 validation_errors() 时,我都会得到一个空字符串。

这是一个代码 sn-p。

$base_rules = 'required|trim';

$this->_validation_rules = array(
        array(
            'field' => 'name',
            'label' => 'name',
            'rules' => $base_rules . '|alpha_numeric|min_length[5]|max_length[30]'
        ),
        array(
            'field' => 'price',
            'label' => 'Price',
            'rules' => $base_rules . '|decimal'
        ),
        array(
            'field' => 'duration',
            'label' => 'Duration',
            'rules' => $base_rules . '|integer'
        ),
        array(
            'field' => 'booking',
            'label' => 'Booking',
            'rules' => $base_rules . '|integer'
        )
    );
    $this->form_validation->set_rules($this->_validation_rules);

    if ($this->form_validation->run()) {
        // do stuff
    }else{
        // prints an empty string
         var_dump(validation_errors());
         exit;
    }

有谁知道为什么会这样,以及我怎样才能得到我的错误?

【问题讨论】:

    标签: php forms codeigniter validation


    【解决方案1】:

    将validation_errors() 放在表单顶部,并将代码更改为

     if ($this->form_validation->run()) {
            // do stuff
        }else{
           $this->load->view('myform'); //display your form again
        }
    

    validation_errors() 只会在视图中填充。

    【讨论】:

    • 非常感谢,不过有一个问题 - 这是否意味着无法将验证错误存储在 flashdata 或其他存储中,以便我可以重定向到其他地方?干杯
    • @John 如果我们发送 AJAX 请求怎么办?当然,那么我们需要在 Controller 而不是 View 中获取错误。那么,有什么办法可以解决Controller中的错误吗? validation_errors() 在控制器中不起作用。
    【解决方案2】:

    将此代码放在视图文件的表单顶部

    echo validation_errors('<div>', '</div>');
    

    然后改成这个

    else{
        $this->load->view('myform'); //display your form again
    }
    

    【讨论】:

      【解决方案3】:

      要完成 John 的回答,如果您发布了表单帖子,您可以将其放在您的输入下方:

      <?php echo form_error('input-name'); ?>
      

      但是,如果您正在发出 ajax 请求(现在不是您的情况,但将来如果您需要) 你可以使用validation_errors()。

      这里是一个例子:

          //Important to turn that off if it's on
          $this->output->enable_profiler(false); 
      
          $this->output->set_status_header('500');
          $this->output->set_content_type('application/json');
      
          echo json_encode(array(
              'error_msg' => validation_errors(),
          ));
      

      然后在您的客户端,您可以使用这样的响应:

      error:function(data) {
          $("your-error-input-selector").html('').append(data.responseJSON.msg);
      }
      

      希望我能帮上忙,即使我迟到了 1 年。

      P.S 对不起,我的英语不好。

      【讨论】:

      • 您是否添加了表单验证?您是否进行了验证?我可以看看你的代码吗?我很乐意为您提供帮助!
      猜你喜欢
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 2019-04-18
      • 2013-03-24
      • 2014-02-20
      相关资源
      最近更新 更多