我正在编写一个系统,用户可以根据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的东西放在了错误的地方,但我尝试了一些排列,我只是一直弄错了。我希望我能在正确的地方得到一些建议。
答案 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。