4

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

这是一个代码片段。

$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;
    }

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

4

3 回答 3

5

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

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

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

于 2013-02-01T23:48:36.187 回答
1

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

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

然后改成这个

else{
    $this->load->view('myform'); //display your form again
}
于 2013-02-01T23:56:11.463 回答
1

要完成 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 年。

PS对不起我的英语不好。

于 2014-03-10T17:40:37.660 回答