我正在为我的表单中的多个字段设置相同的回调函数:
foreach($fields as $class => $i)
{
++$i;
$validation->set_rules('car_' . $i . '_one', $class, 'trim|xss_clean|callback_validate_car_fields[TRUE]');
$validation->set_rules('car_' . $i . '_twor', $class, 'trim|xss_clean|callback_validate_car_fields[FALSE]');
$validation->set_rules('in_car_' . $i . '_one', $class, 'trim|xss_clean|callback_validate_car_fields[TRUE]');
$validation->set_rules('in_car_' . $i . '_two', $class, 'trim|xss_clean|callback_validate_car_fields[FALSE]');
}
(class
varle在这种情况下是Car
)
这是回调函数:
function validate_car_fields($input, $required)
{
if ($required === "TRUE" && empty($input))
{
$this->form_validation->set_message('validate_car_fields', 'Field %s can not be empty!');
return FALSE;
}
return TRUE;
}
它显示出加倍的错误:
* Field Car can not be empty!
* Field Car can not be empty!
* Field Car can not be empty!
* Field Car can not be empty!
在这种情况下,这是可以理解的行为,但我想每个字段名称只显示一个错误,而不是每个字段显示4个错误。如何做到这一点?
答案 0 :(得分:1)
试试这个
function validate_car_fields($input, $required)
{
static $validation_failed_once = FALSE;
if ($required === "TRUE" && empty($input))
{
// Return FALSE without setting error message from 2nd validation fail onwards
if ($validation_failed_once) return FALSE;
$this->form_validation->set_message('validate_car_fields', 'Field %s can not be empty!');
// Set error message only for the first validation error
$validation_failed_once = TRUE;
return FALSE;
}
return TRUE;
}
答案 1 :(得分:1)
考虑使用新功能编辑或创建(Extending Native Libraries)libraries/MY_Form_validation.php
:
function remove_duplicate_errors() {
$arr = array();
foreach(array_keys($this->_error_array) as $h) {
if (in_array($arr, $this->_error_array[$h]))
unset($this->_error_array[$h]);
else $arr[] = $this->_error_array[$h];
}
}
只需在$this->form_validation->remove_duplicate_errors();
之后致电$this->form_validation->run()
。这应该删除字符串相同的所有情况。但是请考虑在您的设计上采用另一种方法,因为知道这4种中哪一种不正确可能是有用的。