domingo, outubro 10, 2010

Tutorial CodeIgniter - Parte 4

Vamos agora adicionar a validação no formulário de criação das Bacias Hidrográficas e em seguida, no próximo post, finalizar a aplicação com o CRUD dos rios.

A validação no CodeIgniter é feita através da biblioteca  "form_validation", o único problema que eu tive com ela, foi o fato da mesma não aceitar acentos da língua portuguesa,  para resolvermos  isso, vamos extender a classe do core realizando uma modificação no código da função alpha().

Para ver as mensagens dos erros de validação em português, é necessário baixar este arquivo, em seguida descompactar a pasta pt_br em sirh/system/language, feito isso, agora abra o arquivo config.php (dentro da pasta config) e mude a linha 69 para: $config['language'] = "pt-br";

Temos então que copiar o arquivo Form_validation.php da pasta /system/libraries para a pasta /system/application/libraries, agora abra o arquivo copiado e procure pela função alpha(), comente o return dela, e faça a seguinte alteração:

function alpha($str)
{
    //return ( ! preg_match("/^([a-z])+$/i", $str)) ? FALSE : TRUE;
    return (!preg_match("/^([A-Za-zá-úÁ=Ú.\s])+$/i", $str)) ? FALSE : TRUE;
}
 

Modificada a expressão regular, agora é possível trabalhar com palavras acentuadas.

Abra o controller bacia.php, vamos adicionar a validação nas funções insere() e atualizar(). Para isso é necessário Carregar a biblioteca form_validation no método construtor do controlador:

function __construct()
{
    parent::_construct();
    $this->load->model('bacia_model');
    $this->load->library('form_validation');
}



A função insert() ficará assim:

function insere()
{
    // o campo é requerido e deve ser uma string (alpha)
    $this->form_validation->set_rules('nome_bacia', 'Nome da Bacia', 'required|alpha');
    // caso a validação não passe,  carregue a view com o array $data
    if ($this->form_validation->run() == FALSE)
    {
        $data['titulo'] = "SIRH - Nova Bacia Hidrográfica | Erro na Validação, preencha corretamente!";
        $data['cabecalho'] = "Criar Bacia Hidrográfica | Preencha Corretamente!";

        $this->load->view('bacia_new', $data);
    }
    else
    {
        $this->bacia_model->insert();
        $this->session->set_flashdata('msg', 'Registro Criado com Sucesso!');
        redirect('bacia');
    }
}

e a update():

function atualizar()
{
    $id = $this->input->post('id_bacia');

    $this->form_validation->set_rules('nome_bacia', 'Nome da Bacia', 'required|alpha');

    // caso a validação não passe, carregue a view com o array $data
    if ($this->form_validation->run() == FALSE)
    {
        $data['titulo'] = "SIRH - Editar Bacia Hidrográfica | Erro na Validação, preencha corretamente!";
        $data['cabecalho'] = "Editar Bacia Hidrográfica | Preencha Corretamente!";

        $data['registro'] = $this->bacia_model->get_where($id);

        $this->load->view('bacia_new', $data);
    }
    else
    {
        $this->bacia_model->update($id);
        $this->session->set_flashdata('msg', 'Registro Atualizado com Sucesso!');
        redirect('bacia');
    }
} 

A regra adicionada não permite que o campo "nome" da Bacia Hidrográfica fique sem preenchimento (required), e será permitido apenas o preenchimento com texto (alpha). Para sinalizar as mensagens de erro, Abra a view bacia_new.php e adicione a função abaixo, logo depois do cabeçalho:

<p><?= validation_errors(); ?></p>

É isso... no próximo post vou mostrar como ficará o CRUD da tabela rio. Um abraço e até lá!

Nenhum comentário: