我有一个多选框,我正在使用CI来验证自定义CI验证库的下拉列表。但它总是产生字符串,而它产生一系列选定的项目。
<select multiple="" class="form-control" name="course[]" id="course">
<option value="">Select Course</option>
<option value="38833851">B.com</option>
<option value="31068174">B.Sc Nursing</option>
<option selected="selected" value="7771143">B.Tech</option>
</select>
并在控制器中
$this->form_validation->set_rules('course[]', 'course name','required|multiple_select');
等等。我创建了另一个自定义验证库。
class MY_Form_validation extends CI_Form_validation{
protected $CI;
public function __construct(){
parent::__construct();
$this->CI =& get_instance();
}
public function multiple_select($array){
print_r($array); die;
$this->CI->form_validation->set_message('multiple_select', 'Select at least one %s');
if(empty($array)){
return false;
}else{
return true;
}
}
}
但是$array
总是打印一个字符串。
请提供任何解决方案。
答案 0 :(得分:1)
我拿了你提供的代码并在codeigniter中重建了这个场景。看起来与您正在运行的文档和特定的codeigniter版本存在冲突(我自己显然是因为我能够复制您的问题)。在文档中,它告诉您在表单验证配置行中使用空括号,如下所示:
$this->form_validation->set_rules('options[]', 'Options', 'required');
然而,我能够在验证函数中接收数组值的唯一方法是不在表单验证集规则函数中包含空数组括号。以下是删除括号的原始行:
$this->form_validation->set_rules('course', 'course name','required|multiple_select');
更改此行会导致数组值按预期传递给验证函数。
答案 1 :(得分:1)
我建议您使用Codeigniter Callback:
public function multiple_select()
{
$arr_course = $this->input->post('course[]');
if(empty($arr_course)):
$this->form_validation->set_rules('course','Select at least one course');
return false;
endif;
}
在您的控制器中
$this->form_validation->set_rules('course[]', 'course name','required|callback_multiple_select');