Uma das tarefas mais cruciais num sistema de informação é garantir a solidez dos dados, que serão processados em informações, para que o sistema seja confiável e tenha uma taxa de erros mínima. Deve-se também preocupar-se com a possibilidade de dados de tipos diferente fiquem em conflito, por exemplo: Temos um campo em um formulário no qual deve ser digitada a idade de uma pessoa e no banco temos um campo do tipo int, esperamos que o usuário utilize números, mas ele pode imaginar e pode digitar por extenso e quando formos gravar isso no banco lógico que não vai dar certo.
Então sem mais delongas vamos começar.
Validando a Entrada de dados
Toda a regra de validação é feita no model através de um array, nele podemos associar nossos campos com suas regras utilizando funções já prontas e criando nossas quando for o caso.
Vejamos o seguinte formulário criado usando o HtmlHelper.
Listagem 1: formulário para validar
<?php
/*restante do código acima*/
Echo $this->Form->create
(‘Pessoa’,array
(‘url’=>array(
‘action’=>’cadastra’,’controller’=>’pessoas’
)
)
);
echo $this->Form->input(‘nome’);
echo $this->Form->input(‘idade’);
echo $this->Form->end(‘salvar’);
/*restante do código abaixo*/
?>
Iremos validar para que nenhum dos campos seja passado vazio e idade apenas números.
No model Pessoa varemos a seguinte configuração.
Listagem 2: model com regra de validação completa
<?php
class Pessoa extends AppModel{
public $validate = array(
//campo que deve ser validado
‘nome’ => array(
//alias da validação
‘notempty’ => array(
‘rule’=>’notempty’,//validação para não aceitar vazio
‘message’=>”Você deve preencher este campo”//erro
)
),
‘idade’ => array(
‘notempty’ => array(
‘rule’ => ‘notempty’,
‘message’ => ‘Você deve preencher este campo’
),
‘numeric’ => array(
‘rule’ => ‘numeric’,
‘message’ => ‘Você deve preencher este campo’
)
)
);
}
?>
Dessa forma temos uma validação básica personalizada. Mas essa não é única forma de se fazer a validação, vejamos outros modos.
Modo simples.
Nesse modo escrevemos pouco mais temos uma validação sem muita personalização. Deve ser feita dessa forma:
Listagem 3: Modo simples de validação
public $validate =array(
'nomedocampo' => 'regra',’nomedocampo2’=>’regra2’);
Modo completo.
Esse é o modo que usamos na validação da listagem 2, no qual podemos definir diversas opções para tornar mas personalizada e também podemos fazer mais de uma validação por campo.
Veja as opções completas:
Listagem 4: Validação Completa
public $validate = array(
'fieldName1' => array(
‘rule’=>array(
'rule' => 'regra', // nome da regra ou: array('regra', 'param1', / //'param2' ...)
'required' => true,//faz com que o esse campo sempre seja requerido
'allowEmpty' => false,// boleano permite ou não o campo vazio
'on' => 'create', // ou: 'update' tipo de requisição ao banco de dados
'message' => 'A mensagem de erro saca?'
)//segunda regra vem aqui na segunda posição
)
)
Pronto temos uma validação completa e ainda assim simples para de entender. E ainda veremos como criar nossas próprias validações.
Principais tipos de validações padrão
- alphanumeric - Números e letras
- between - array(‘between’,3,5) ranger entre dois números
- email - verifica o formato de email
- extension - tipo do arquivo.jpg .pdf...
- isUnique - quando um campo deve único como um CFP por exemplo
- minLength - tamanho minimo
- maxLength - tamnho maximo
- numeric - apenas números
- notEmpty - não permite o campo vazio
Criando validações
Não Tem muito mistério na criação de novas regras de validação. Elas são funções normais public ou protected com obrigatoriamente um argumento que será o campo que você estará validandO.
Listagem 5: Criando uma validação
<?php
//restante do código
public function validaMaiorIdade($check){
/*o campo valor do campo fica desponivel dentro de $chech[‘nomeDocampo’]*/
if($check[‘idade’] > 18)
return true;
else
return false;
}
?>
Função criada basta chama-la normalmente na validação. Da seguinte forma:
Listagem 6: Chamada da validação personalizada.
//restante do código acima
public $validate = array(
‘idade’ => array(
‘validaMaiorIdade’ =>array(
‘rule’ =>’ validaMaiorIdade’/*se houvesse mais argumentos
array(validaMaiorIdade,param1,param2)*/,
‘message’ =>’Você não é maior de idade’
)
)
);
Pronto pessoal é isso, repito, fácil e rápido, a única desvantagem que vejo aqui é o processamento no servidor que aumenta naturalmente quando vazemos diversas coisas nele, mas caso uma validação cliente-side falhe a validação previne o erro.
Até o próximo post e deixem seus feedbacks.