Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro na validação do formulário

Eu criei a seguinte classe para validar meus formulários:

<?php 

Class validaform{

    protected $CI;

    function __construct(){
        $this->CI =& get_instance();
    }

    public function criaConta(){
        $this->CI->form_validation->set_rules("nome", "Nome", "required");
        $this->CI->form_validation->set_rules("email", "Email", "required|valid_email|callback_email_em_uso");
        $this->CI->form_validation->set_rules("confirm-email", "Confirmar Email", "required|valid_email|matches[email]");
        $this->CI->form_validation->set_rules("senha", "Senha", "required");
        $this->CI->form_validation->set_rules("confirm-senha", "Comfirmar Senha", "required|matches[senha]");
        $this->CI->form_validation->set_error_delimiters("<b style='color: red'>  (", ")</b>");
        return $this->CI->form_validation->run();
    }

    public function login($dadosLogin){
        $this->CI->form_validation->set_rules("email", "Email", "required|valid_email");
        $this->CI->form_validation->set_rules("senha", "Senha", "required");
        $dadosForamInseridos = $this->CI->form_validation->run();
        $usuarioEhValido = $this->CI->UsuarioDao->buscaUsuario($dadosLogin); 
        if($dadosForamInseridos && $usuarioEhValido) return true;
        return false;
    }

    public function novaCategoria(){
        $this->CI->form_validation->set_rules("nome", " ", "required|callback_categoria_ja_existe");
        $this->CI->form_validation->set_rules("usuario_id", "Id usuario", "required|numeric");
        $this->CI->form_validation->set_error_delimiters("<p class = 'alert-danger'>", "</p>");
        return $this->CI->form_validation->run();
    }

    public function edicaoCategoria($dadosCategoria){
        $this->CI->form_validation->set_rules("nome", " ", "required|callback_categoria_ja_existe");
        $this->CI->form_validation->set_rules("id", "Id", "required|numeric");
        $this->CI->form_validation->set_rules("usuario_id", "Id usuario", "required|numeric");
        $this->CI->form_validation->set_error_delimiters("<p class='alert-danger'>", "</p>");
        $dadosInseridos =  $this->CI->form_validation->run();
        $manteveMesmoNome = $this->CI->CategoriaDao->ehValidoEditarMesmoNome($dadosCategoria['nome'], $dadosCategoria['id']);
        if($dadosInseridos || $manteveMesmoNome) return true;
        return false;

    }

    #minhas resgras de validação
    public function email_em_uso($email){
        $emailsEmUso = $this->CI->UsuarioDao->busca('email');
        foreach ($emailsEmUso as $emailEmUso){
            if($emailEmUso['email'] == strtolower($email)){
                $this->CI->form_validation->set_message("email_em_uso", "Este email já está sendo utilizado");
                return FALSE;
            }
        }
        return TRUE;
    }

    public function categoria_ja_existe($nome){
        $usuario = $this->CI->login->usuarioLogado();
        $nomeCategoriasExistentes = $this->CI->CategoriaDao->busca('nome', $usuario->id);
        foreach($nomeCategoriasExistentes as $categoriaExistente){
            if(strtolower($categoriaExistente['nome']) == strtolower($nome)){
                $this->CI->form_validation->set_message("categoria_ja_existe", "Essa categoria já existe");
                return FALSE;
            }
        }
        return TRUE;
    }

}

Contudo quando eu tento enviar o formulário surge o seguinte erro:

 "Não    existe    uma    mensagem    de    erro    para    o    campo    com    o    nome.(categoria_ja_existe)"

O mesmo acontece para a outra validação que eu criei, já tentei passar a função com e sem callback, mas nada adiantou, desde já agradeço pela ajuda.

ps: a classe em questão se trata de uma lib (n sei se isso interfere em algo)

2 respostas

Já tentou adicionar lá no arquivo form_validation_lang.php o $lang correspondente?

solução!

Eu guardei as funções de validação num helper q é carregado dentro do construct da classe, agr elas estão funcionando de boa, mesmo assim obrigado pela ajuda