我在codeigniter中遇到了关于一般表单验证的问题.在我的例子中,字段发布在数组$m_data = json_decode($this-> input-> post(‘data’));并且需要在将它们发送到模型之前进行验证.看这个例子
$m_data = json_decode($this->input->post('data'));
$validation_rules = array(
$m_data['title'] => 'trim|xss_clean|required|max_length[50]',
$m_data['code'] => 'trim|xss_clean|required|max_length[50]'
);
foreach ($validation_rules as $key => $value){
$this->form_validation->set_rules($key,$key,$value);
}
if ($this->form_validation->run()) {
foreach ($validation_rules as $key => $value){
$m_data[$key] = $this->form_validation->set_value($key);
}
// do insertion
}
这里的问题是,表单验证将使用已发布值的“键”将每个字段分别作为发布数据,并对其运行规则.我试图创建自定义验证,接收一组字段作为输入,但我不知道如何做到这一点.
你能帮助我找到一种使用CI表单验证来验证数组内容的方法,任何输入都表示赞赏
解决方法:
您可以将数组用作具有CI表单验证的字段名称.
http://codeigniter.com/user_guide/libraries/form_validation.html#arraysasfields
你需要做的是这样的事情.
$this->form_validation->set_rules('data[]', 'Data', 'trim|xss_clean|required|max_length[50]');
if ($this->form_validation->run()) {
// DO INSERT
}
else
{
// LOAD VIEWS
}
我很确定规则是通过数据递归应用的,但我会做一些测试以确保.我尝试了不同的字段类型(请参阅下面的HTML),它至少适用于所需的规则. (这只是快速HTML,我使用CI表单助手).
<input type="radio" value="Test data" name="data[]" />
<input type="radio" value=" More data " name="data[]" />
<input type="radio" value="3" name="data[]" />
<input type="input" value="" name="data[]" />
这仅适用于每个字段的所有规则相同的情况.