我的所有规则都位于/config/form_validation.php
的文件中:
$config = array(
'cadastro_pessoa_fisica' => array(
array(
'field' => 'imagem',
'label' => 'IMAGEM',
'rules' => 'callback__validate_image_file'
),
array(
'field' => 'nome_razao_social',
'label' => 'NOME',
'rules' => 'required'
),
...
...
但我直接在控制器中设置了一条规则。在编辑用户的信息和电子邮件发生变化时,规则是在继续之前应用这些规则:
public function edit($id)
{
$this->input->post('tipo_usuario') === 'F' ? $validator = 'editar_pessoa_fisica' : $validator = 'editar_pessoa_juridica';
if ($this->input->post('email') !== $this->input->post('novoemail')) {
$this->form_validation->set_rules('email', 'E-MAIL', 'required|valid_email|is_unique[usuario.email]');
}
if ($this->form_validation->run($validator)) {...}
问题是只有电子邮件规则显示任何错误。如果我将姓名,电话和电子邮件字段留空,则错误消息仅适用于电子邮件字段。当它们失败时,似乎只能看到控制器中的验证规则。
修改
这是编辑表单的填充方式。登录时,用户的id存储在会话中,当访问编辑视图时,会进行查询以获取用户的信息。
public function edit_panel()
{
if ($this->session->has_userdata('email')) {
$data['id_usuario'] = $this->session->userdata('id_usuario');
$data['usuario'] = $this->Usuarios_model->get($data['id_usuario']);
$data['page'] = $this->config->item('admin_template_dir_auto') . $this->redirect_to_user_panel(true);
$this->load->view($this->_container, $data);
} else {
$this->session->set_flashdata('message', 'Cadastre-se ou entre para acessar');
redirect('/cadastro', 'refresh');
}
}