正如Codeigniter文档所说,我们可以在form_validation.php配置文件中创建一组规则。我想我已经遵循了指令,但问题是它显示空错误消息而不是在配置数组中设置的错误消息。 我的form_validation.php配置文件
$config = array(
'users/register' => array(
array(
'field' => 'user_type',
'label' => 'User Type',
'rules' => 'required|in_list[2,3]',
'errors' => array(
'in_list' => '%s Accept only agents or owners!'
)
),
array(
'field' => 'first_name',
'label' => 'First Name',
'rules' => 'trim|required|alpha_numeric_spaces',
'errors' => array(
'required' => 'Required field.',
'alpha_numeric_spaces' => 'Only letters, number and space are allowed for %s.'
)
),
array(
'field' => 'last_name',
'label' => 'Last Name',
'rules' => 'trim|required|alpha_numeric_spaces',
'errors' => array(
'required' => 'Fields with red asterisk is required!',
'alpha_numeric_spaces' => 'Only letters, number and space are allowed for %s.'
)
),
array(
'field' => 'sex',
'label' => 'Gender',
'rules' => 'trim|required|in_list[male,female]',
'errors' => array(
'in_list' => 'Optional, %s field must be male or female.'
)
),
array(
'field' => 'password',
'label' => 'Password',
'rules' =>'trim|required|min_length[6]|max_length[25]',
'errors' => array(
'required' => 'Required field.',
'min_length' => '%s must be between 6-25 characters long.',
'max_length' => '%s must be between 6-25 characters long.'
)
),
array(
'field' => 'confirm_password',
'label' => 'Password confirmed',
'rules' => 'trim|required|matches[password]',
'errors' => array(
'required' => 'Required field.',
'matches' => '%s doesn\'t match with password field.'
)
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'trim|required|is_unique[users.email]|valid_email',
'errors' => array(
'required' => 'Required field.',
'is_unique' => '%s is already taken.',
'valid_email' => '%s must be valid. For example, johndoe@example.com'
)
)
),
'users/update_address' => array(
array(
'field' => 'house_number',
'label' => 'House Number',
'rules' => 'trim|alpha_numeric_spaces',
'errors' => array(
'alpha_numeric_spaces' => 'Only letters, space and number are allowed for %s'
)
),
array(
'field' => 'street_number',
'label' => 'Street Number',
'rules' => 'trim|alpha_numeric_spaces',
'errors' => array(
'alpha_numeric_spaces' => 'Only letters, space and number are allowed for %s'
)
),
array(
'field' => 'city_id',
'label' => 'City or Province',
'rules' => 'trim|is_natural',
'errors' => array(
'is_natural' => 'Only number is allowed for %s'
)
),
array(
'field' => 'district_id',
'label' => 'District or Khan',
'rules' => 'trim|is_natural',
'errors' => array(
'is_natural' => 'Only number is allowed for %s'
)
),
array(
'field' => 'commune_id',
'label' => 'Commune or sangkat',
'rules' => 'trim|is_natural',
'errors' => array(
'is_natural' => 'Only number is allowed for %s'
)
)
)
);
这是我的用户控制器
class Users extends AL_Controller {
public function __construct() {
parent::__construct();
$this->load->helper(['url','form']);
$this->load->model('user');
$this->load->model('ion_auth_model');
$this->load->library('form_validation');
}
public function update_address() {
header('Content-Type: application/x-json; charset=utf-8');
if(!$this->ion_auth->logged_in()) {
redirect(base_url(). 'users/login', 'refresh');
} else {
if($this->form_validation->run('update_address') == FALSE) {
$data['errors'] = validation_errors();
echo json_encode(array('status' => 'ERROR', 'msg' => 'Your form contains error(s). Please fix it.', 'err' => $data));
} else {
$user_id = $this->ion_auth->get_user_id();
if($this->user->edit_user_address($user_id)) {
echo json_encode(array('status' => 'OK', 'msg' => 'Your address has been updated!'));
} else {
echo json_encode(array('status' => 'ERROR', 'msg' => 'Unable to update your address. Please refresh your page and try again.'));
}
}
}
}
}
这是错误消息显示
{"status":"ERROR","msg":"Your form contains error(s). Please fix it.","err":{"errors":""}}
答案 0 :(得分:2)
我做了类似的事情,但我没有在配置文件中使用类/方法名称关联。我做了如下:
form_validation.php
$config = array(
'register' => array(
array(
'field' => 'user_type',
'label' => 'User Type',
'rules' => 'required|in_list[2,3]',
'errors' => array(
'in_list' => '%s Accept only agents or owners!'
)
),
array(
'field' => 'first_name',
'label' => 'First Name',
'rules' => 'trim|required|alpha_numeric_spaces',
'errors' => array(
'required' => 'Required field.',
'alpha_numeric_spaces' => 'Only letters, number and space are allowed for %s.'
)
),
array(
'field' => 'last_name',
'label' => 'Last Name',
'rules' => 'trim|required|alpha_numeric_spaces',
'errors' => array(
'required' => 'Fields with red asterisk is required!',
'alpha_numeric_spaces' => 'Only letters, number and space are allowed for %s.'
)
),
array(
'field' => 'sex',
'label' => 'Gender',
'rules' => 'trim|required|in_list[male,female]',
'errors' => array(
'in_list' => 'Optional, %s field must be male or female.'
)
),
array(
'field' => 'password',
'label' => 'Password',
'rules' =>'trim|required|min_length[6]|max_length[25]',
'errors' => array(
'required' => 'Required field.',
'min_length' => '%s must be between 6-25 characters long.',
'max_length' => '%s must be between 6-25 characters long.'
)
),
array(
'field' => 'confirm_password',
'label' => 'Password confirmed',
'rules' => 'trim|required|matches[password]',
'errors' => array(
'required' => 'Required field.',
'matches' => '%s doesn\'t match with password field.'
)
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'trim|required|is_unique[users.email]|valid_email',
'errors' => array(
'required' => 'Required field.',
'is_unique' => '%s is already taken.',
'valid_email' => '%s must be valid. For example, johndoe@example.com'
)
)
),
'update_address' => array(
array(
'field' => 'house_number',
'label' => 'House Number',
'rules' => 'trim|alpha_numeric_spaces',
'errors' => array(
'alpha_numeric_spaces' => 'Only letters, space and number are allowed for %s'
)
),
array(
'field' => 'street_number',
'label' => 'Street Number',
'rules' => 'trim|alpha_numeric_spaces',
'errors' => array(
'alpha_numeric_spaces' => 'Only letters, space and number are allowed for %s'
)
),
array(
'field' => 'city_id',
'label' => 'City or Province',
'rules' => 'trim|is_natural',
'errors' => array(
'is_natural' => 'Only number is allowed for %s'
)
),
array(
'field' => 'district_id',
'label' => 'District or Khan',
'rules' => 'trim|is_natural',
'errors' => array(
'is_natural' => 'Only number is allowed for %s'
)
),
array(
'field' => 'commune_id',
'label' => 'Commune or sangkat',
'rules' => 'trim|is_natural',
'errors' => array(
'is_natural' => 'Only number is allowed for %s'
)
)
)
);
控制器类
class Users extends AL_Controller {
public function __construct() {
parent::__construct();
$this->load->helper(['url','form']);
$this->load->model('user');
$this->load->model('ion_auth_model');
$this->load->library('form_validation');
}
public function update_address() {
header('Content-Type: application/x-json; charset=utf-8');
if(!$this->ion_auth->logged_in()) {
redirect(base_url(). 'users/login', 'refresh');
} else {
if($this->form_validation->run('update_address') == FALSE) {
$data['errors'] = validation_errors();
echo json_encode(array('status' => 'ERROR', 'msg' => 'Your form contains error(s). Please fix it.', 'err' => $data));
} else {
$user_id = $this->ion_auth->get_user_id();
if($this->user->edit_user_address($user_id)) {
echo json_encode(array('status' => 'OK', 'msg' => 'Your address has been updated!'));
} else {
echo json_encode(array('status' => 'ERROR', 'msg' => 'Unable to update your address. Please refresh your page and try again.'));
}
}
}
}
}
注意:在autoload.php
中,我添加了$autoload['libraries'] = array('form_validation');
来加载form_validation配置。
希望这对你也有用。如果您遇到任何其他问题,请告诉我。
答案 1 :(得分:0)
应用/配置/ form_validation.php
您已在那里定义了表单验证规则
所以你必须加载
$this->config->load('form_validation');
并尝试以
的形式访问配置规则$this->form_validation->set_rules($this->form_validation->set_rules($this->config->item('users/update_address'));
看看这个帮助
答案 2 :(得分:0)
最后我找到了答案。 Codeigniter文档并没有说清楚类/方法名称关联。当我从
改变时$this->form_validation->run('update_address') == FALSE
到
$this->form_validation->run('users/update_address') == FALSE
然而,如下所示的消息显示很难确定哪个字段的错误。任何更好的答案将不胜感激。
{"status":"ERROR","msg":"Your form contains error(s). Please fix it.","err":{"errors":"<p>Only letters, space and number are allowed for House Number<\/p>\n<p>Only letters, space and number are allowed for Street Number<\/p>\n"}}