Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida no Ex. 2 da Aula 4 - Validação customizada e mensagens em português

A minha mensagem de erro customizada não funciona, tentei seguir as sugestões acima mas não consegui nem achar o arquivo de log nem habilitar a exibição na tela como sugerido. Se alguém puder me ajudar com algum dos itens:

1 - erro customizado: public function cadastrar() { $this->load->library("form_validation"); $this->form_validation->set_rules("nome", "nome", "required|min_length[5]|callback_nao_tenha_a_palavra_melhor"); // tentei aqui $this->form_validation->set_rules("preco", "preco", "required"); $this->form_validation->set_rules("descricao", "descricao", "trim|required|min_length[10]|callback_nao_tenha_a_palavra_melhor"); //tentei aqui de novo, não funcionou em nenhum dos dois $this->form_validation->set_error_delimiters("

", "

"); $sucesso = $this->form_validation->run(); if ($sucesso){ ...

public function nao_tenha_a_palavra_melhor($nome) { $posicao = strpos($nome, "melhor"); if($posicao !== FALSE) { return TRUE; } else { $this->form_validation->set_message("nao_tenha_a_palavra_melhor", "O campo '%s' não pode conter a palavra 'melhor'"); return FALSE; }

}

2 - Habilitei no application /config/config.php $config['log_threshold'] = 4; mas não mostra mensagens de erro

3 - dentro da pasta temp do computados não existe o arquivo de log php54_errors, na verdade a pasta esta vazia, e esta configurado para visualizar arquivos ocultos. Na pasta temp do windows também não achei nada.

4 - Não consegui fazer a versão dos erros em português funcionar, parece algo muito simples, baixe o arquivo, copiei a pasta "portuguese-br" para pasta application/language, já existia a pasta english la, agora tem as duas e mudei a configuração para: $config['language'] = 'portuguese-br'; depois disto recebi a mensagem : "Unable to access an error message corresponding to your field name.", ou seja, ele não reconhece a pasta portuguese-br para achar as mensagens.

Desculpem a quantidade de duvidas, mas já pedi um dia inteiro tentando resolver o problema, já estou sem alternativas.

Muito obrigado.

Emerson

1 resposta
solução!

Achei o problema, meio que sem querer mais achei. A logica do exercício na explicação estava descrita como:

public function nao_tenha_a_palavra_melhor($nome) { $posicao = strpos($nome, "melhor"); if($posicao !== FALSE) { return TRUE; } else { $this->form_validation->set_message("nao_tenha_a_palavra_melhor", "O campo '%s' não pode conter a palavra 'melhor'"); return FALSE; }

}

Mas fiz um dump do $posição com varios testes, e quando há a palavra "melhor" no campo nome, ele retorna a posição que a palavra esta, quando não há a palavra "melhor" , ele retorna "false", então se posição for igual a "false", ele deve retornar "true" e deixar cadastrar, se for diferente de "false", deve retornar "false" e setar a mensagem. A logica fica assim:

public function nao_tenha_a_palavra_melhor($nome) { $posicao = strpos($nome, "melhor"); if($posicao == false) { return true; } else { $this->form_validation->set_message("nao_tenha_a_palavra_melhor", "O campo '%s' não pode conter a palavra 'melhor'"); return false; }