CakePHP Brasil

18 abril 2009

Validações brasileiras

Arquivado em: CakePHP, Tutoriais — Tags:, , , , , — Juan Basso @ 11:55 am

No CakePHP temos diversas validações que servem para os EUA, porém nenhuma para os padrões brasileiros.  Pensando nisso, resolvi fazer um behavior para fazer este tipo de validação. Por enquanto ele só valida CPF, CNPJ, telefone e CEP.

O código está junto do projeto CakePTBR no GitHub. Eu coloquei ele na forma de plugin, então basta copiar a pasta plugins para dentro do seu projeto (pasta app). Feito isto, ele já instalado e já pode ser usado nas models.

Nas models, deve ser incluído o behavior e usar a validação normalmente. Exemplo:

1
2
3
4
5
6
7
8
9
class Usuario extends AppModel {
	var $name = 'Usuario';
	var $actsAs = array('CakeBr.Validacao'); // Aqui inclui o behavior do plugin CakeBr
	var $validates = array(
		'cpf' => array(
			'rule' => 'cpf'
		)
	);
}

Este exemplo mostra como validar o campo cpf. Mais detalhes de como funciona a validação, veja no CookBook.

Bem, mas afinal, o que será validado?! Vamos detalhas um pouco mais cada uma das quatro funções de validação:

CPF

Se a regra for declarada apenas como cpf (idem exemplo acima), ele irá validar o CPF no formato XXX.XXX.XXX-XX e também fará o teste do dígito verificador (dois últimos números) para verificar se é um CPF válido.  Em determinadas situações, deseja-se enviar pro banco apenas os números, sem a formatação, pra isso, coloquei um parâmetro opcional que pode ser passado para fazer este teste. Na rule, deve ser colocado:

1
2
3
4
5
	var $validates = array(
		'cpf' => array(
			'rule' => array('cpf', true)
		)
	);

Deste modo ele irá validar apenas números.

CNPJ

Mesmo funcionamento do CPF, porém para CNPJ. A regra de apenas números também é válida. O formato do CPNJ é considerado XX.XXX.XXX/XXXX-XX.

CEP

O CEP, por padrão vai ser considerado nos formatos XXXXXXXX ou XXXXX-XXX. Caso queira alterar o separador, você pode definir da seguinte maneira:

1
2
3
4
5
	var $validates = array(
		'cep' => array(
			'rule' => array('cep', array('', '-', '.'))
		)
	);

No exemplo acima, ele vai validar os valores padrões e XXXXX.XXX.

Telefone

A validação do telefone se dará através das formatações:

  • XXXX-XXXX
  • (XX) XXXX-XXX (o espaço entre o fechamento de parênteses e o número é opcional, mas limitado a 1 espaço)
  • +XX (XX) XXXX-XXXX (idem anterior sobre o espaçamento)

Caso deseje validar apenas números, passar o parâmetro true na validação. Neste caso, ele validará números com 8 ou 10 caracteres.

Bem, são estas as validações que fiz por enquanto. Caso alguém tenha uma sugestão de nova validação ou dúvida sobre as apresentadas, fique a vontade de comentar.

22 maio 2008

Novas opções de validação

Arquivado em: CakePHP — Tags:, , , , , — Juan Basso @ 12:14 am

Este post é baseado no post Three new validation rules, de Daniel Hofstetter.

Recentemente foram incluídas novas regras de validação. Com isso, você pode usar três novas regras de validação nos seus models: boolean, inList e time.

boolean é auto-explicativa: testa se o valor é booleano (0 ou 1, false ou true, ‘0′ ou ‘1′).

1
var $validate = array('is_enabled' => array('rule' => array('boolean')));

inList é para verificar se um valor está dentro de uma lista.

1
var $validate = array('cor' => array('rule' => array('inList', array('vermelho', 'verde', 'azul'))));

time determina se o valor informado está num formato de hora válida.

1
var $validate = array('hora_inicial' => array('rule' => array('time')));

 
Para complementar, criei o ticket 4727 para que coloquem nas regras de validação os formatos brasileiros. São três formatos específicos: postal code (nosso CEP), phone (formato de telefone. Coloquei com código internacional, código de área e telefone, além de 0300, 0800 e 0900) e ssn (não é muito igual, mas coloquei a regra do CPF, que é o similar aqui no Brasil). Quando sair o resultado eu informo a vocês.

Powered by WordPress