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.
Parabéns Juan,
Muito legal o Plugin! Esta faltando uns testezin né? =D Grande abraço!
Comentário por JoaoJose — 18 abril 2009 @ 1:47 pm
Maravilha, parabéns pela iniciativa.
E concordo com o Joao sobre os testezinhos… hehe
Mesmo assim ta de parabéns.
Abraço
Comentário por Rodrigo Moyle — 18 abril 2009 @ 2:53 pm
Pedido atendido! Já está lá o teste unitário do behavior. Ainda bem que fiz, nas quatro funções de validação tinham pequenos probleminhas, que já corrigi…
Abraços e obrigado.
Comentário por Juan Basso — 18 abril 2009 @ 3:34 pm
Um exemplo claro da importância dos testes
Comentário por JoaoJose — 19 abril 2009 @ 1:07 pm
[...] criar o plugin para validações de itens brasileiros, duas funçõezinhas para verificar itens dos [...]
Pingback por Behavior com métodos dos Correios « CakePHP Brasil — 21 abril 2009 @ 7:35 pm
Existe a possibilidade no Cake de eu fazer uma regra de validação juntando duas assim: regra1 ou regra2?
Pelo que vi só é possivel regra1 e regra2.
Eu queria utilizar as validações de cpf e cpnj no mesmo campo e não to descobrindo como..
Se puderem me ajuda, agradeço ;D
Comentário por Gabriel — 1 junho 2009 @ 9:36 pm
Eu desconheço. Até procurei algumas referências e olhei nos fontes do cake e não vi uma saída para seu problema. Você não tem como fazer algumas modificações no beforeValidate ou beforeSave para sanar isto? Abraços.
Comentário por Juan Basso — 1 junho 2009 @ 10:03 pm