Codeigniter 表单验证需要数组
Codeigniter form validation required array
我有一个带有数组字段的表单,允许用户 select 多个类别 ID。他们必须 select 至少一类,但可以 select 多于一类。我的表单验证需要确保至少指定了一个类别 ID,然后对于每个类别 ID,它需要检查它是否是一个有效类别。这是我拥有的:
$this->form_validation->set_rules('event_categories', 'Categories', 'required');
$this->form_validation->set_rules('event_categories[]', 'Categories', 'integer|exists[category.id]');
我扩展了表单验证库并添加了如下所示的 exists 方法:
/**
* Checks to see if a value exists in database table field
*
* @access public
* @param string
* @param field
* @return bool
*/
public function exists($str, $field)
{
//die("fe");
list($table, $field)=explode('.', $field);
$query = $this->CI->db->limit(1)->get_where($table, array($field => $str));
if($query->num_rows() !== 0) {
return TRUE;
}
else {
if(!array_key_exists('exists',$this->_error_messages)) {
$this->CI->form_validation->set_message('exists', "The %s value does not exist");
}
return FALSE;
}
}
问题是,即使我提交了一个有效的类别 ID 数组,表单验证在要求的检查中失败,并说我必须提交一些,即使我已经提交了。
来自 CI 文档 https://www.codeigniter.com/user_guide/libraries/form_validation.html#using-arrays-as-field-names
$this->form_validation->set_rules('event_categories', 'Categories', 'required');
应该是
$this->form_validation->set_rules('event_categories[]', 'Categories', 'required');
显示表单错误使用
echo form_error('event_categories[]');
现在解决了这个问题,因为我调用的是 form_error('event_categories')
而不是 form_error('event_categories[]')
所以澄清一下,如果您提交的数组是必需的,正确的验证规则格式是:
$this->form_validation->set_rules('event_categories[]', 'Categories', 'required');
我有一个带有数组字段的表单,允许用户 select 多个类别 ID。他们必须 select 至少一类,但可以 select 多于一类。我的表单验证需要确保至少指定了一个类别 ID,然后对于每个类别 ID,它需要检查它是否是一个有效类别。这是我拥有的:
$this->form_validation->set_rules('event_categories', 'Categories', 'required');
$this->form_validation->set_rules('event_categories[]', 'Categories', 'integer|exists[category.id]');
我扩展了表单验证库并添加了如下所示的 exists 方法:
/**
* Checks to see if a value exists in database table field
*
* @access public
* @param string
* @param field
* @return bool
*/
public function exists($str, $field)
{
//die("fe");
list($table, $field)=explode('.', $field);
$query = $this->CI->db->limit(1)->get_where($table, array($field => $str));
if($query->num_rows() !== 0) {
return TRUE;
}
else {
if(!array_key_exists('exists',$this->_error_messages)) {
$this->CI->form_validation->set_message('exists', "The %s value does not exist");
}
return FALSE;
}
}
问题是,即使我提交了一个有效的类别 ID 数组,表单验证在要求的检查中失败,并说我必须提交一些,即使我已经提交了。
来自 CI 文档 https://www.codeigniter.com/user_guide/libraries/form_validation.html#using-arrays-as-field-names
$this->form_validation->set_rules('event_categories', 'Categories', 'required');
应该是
$this->form_validation->set_rules('event_categories[]', 'Categories', 'required');
显示表单错误使用
echo form_error('event_categories[]');
现在解决了这个问题,因为我调用的是 form_error('event_categories')
而不是 form_error('event_categories[]')
所以澄清一下,如果您提交的数组是必需的,正确的验证规则格式是:
$this->form_validation->set_rules('event_categories[]', 'Categories', 'required');