Codeigniter验证帮助

时间:2010-05-24 20:33:56

标签: php validation codeigniter

我正在编写一个系统,用户可以根据4个下拉列表的值按需生成/运行查询。这些列表是基于许多因素动态生成的,但此时,我在使用codeigniter的内置验证类验证输入时遇到问题。我觉得我的事情不合时宜,而且我已经尝试过查看codeigniter网站,但我认为我正在绊倒自己。

在我的视图(/dashboard/dashboard_index.php)中,我有以下代码块:

<?=form_open('dashboard/dashboard_add');?>
        <select ... name='selMetric'>
        <select ... name='selPeriod'>
        <select ... name='selSpan'>
        <select ... name='selTactic'>
        <input type="submit" name="submit_new_query" value="Add New Graph" class="minbutton" ></input>
<?=form_close();?>

然后在我的控制器中,我有以下两种方法:

function index() {

        $this->load->helper(array('form', 'url'));
        $this->load->library('validation');

        //population of $data

        $this->load->tile('dashboard/dashboard_index', $data);

    }

function dashboard_add()
    {
        $rules['selMetric'] = "callback_sel_check";
        $rules['selPeriod'] = "callback_sel_check";
        $rules['selSpan'] = "callback_sel_check";
        $rules['selTactic'] = "callback_sel_check";
        $this->validation->set_rules($rules);

        $fields['selMetric'] = "Metric";
        $fields['selPeriod'] = "Time Period";
        $fields['selSpan'] = "Time Span";
        $fields['selTactic'] = "Tactic";
        $this->validation->set_fields($fields);

        if ($this->validation->run() == false) {
            $this->index();
        } 
        else {
            //do stuff with validation information
        }
    }

这是我的问题。我可以正确地验证这些东西,但是对于我有的错误数量,我得到了

Unable to access an error message corresponding to your field name.

作为所有内容的错误消息。我认为我的问题是我将$ rules和$ fields的东西放在了错误的地方,但我尝试了一些排列,我只是一直弄错了。我希望我能在正确的地方得到一些建议。

1 个答案:

答案 0 :(得分:4)

您是否在验证回调函数中设置了错误消息,其消息键与您的函数名称匹配(下例中为sel_check)?也就是说,如果您的回调函数名为sel_check,那么$this->validation->set_message也必须引用sel_check。你的回调函数应该是这样的(原谅稍微伪代码。我不知道你的验证函数实际上做了什么):

function sel_check($var) {
    if ($var == 'something') {
        $this->validation->set_message('sel_check', 'The %s field can not be the word "something"');
        return FALSE;
    } else {
        return TRUE;
    }
}

来自文档:

  

使用$this->validation->set_message函数设置错误消息。请记住,消息键(第一个参数)必须与您的函数名称匹配。

此外,如文档页面顶部所述,您使用的验证库已被弃用,并鼓励使用form_validation library