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.