【问题标题】:CodeIgniter Validation Errors - how to get an array of key => value pairs?CodeIgniter 验证错误 - 如何获取键 => 值对数组?
【发布时间】:2012-02-19 10:33:39
【问题描述】:
假设一个有错误的表单,有没有办法获得一个键(字段名)/值(错误消息)对的数组?例如:
['name'] => 'The name field is required',
['age'] => 'The name must be greater than 18'
如果没有本地方法可以做到这一点,我将扩展表单验证库并公开受保护的属性 *_error_array*。
【问题讨论】:
标签:
php
oop
codeigniter
codeigniter-2
【解决方案1】:
我最终扩展了核心类:
class MY_Form_validation extends CI_Form_validation
{
public function error_array()
{
return $this->_error_array;
}
}
【解决方案2】:
这可能为时已晚,但我想分享一个我使用的解决方案,它不涉及扩展 CI 表单验证库。这个问题已经有了一个公认的答案,但我希望它对其他人有所帮助。
不幸的是,CodeIgniter 的$this->form_validation->error_array() 方法只返回set_rules() 方法产生的错误。它不考虑生成错误的表单字段的名称。但是,我们可以利用 CodeIgniter 的另一个方法 $this->form_validation->error(),它通过将字段名称作为参数传递来返回与特定表单字段关联的错误。
//form validation rules
$this->form_validation->set_rules('f_name', 'First Name', 'trim|required',
['required' => 'First Name is required']
);
$this->form_validation->set_rules('l_name', 'Last Name', 'trim|required',
['required' => 'Last Name is required']
);
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|is_unique[users.email]',
[
'required' => 'Email is required',
'valid_email' => 'Email format is invalid',
'is_unique' => 'Email already exists'
]
);
$error_arr = []; //array to hold the errors
//array of form field names
$field_names= ['f_name', 'l_name', 'email'];
//Iterate through the form fields to build a field=error associative pair.
foreach ($field_names as $field) {
$error = $this->form_validation->error($field);
//field has error?
if (strlen($error)) $error_arr[$field] = $error;
}
//print_r($error_arr);