HUFERSIL.WEBDEVELOPER

Validação de Dados

Uma das coisas mais chatas para fazer no momento do desenvolvimento é a validação de dados. Geralmente, o que vemos é:

if(empty($_POST['name'])) {
    echo 'Supply your name';
} else if(strlen($_POST['name']) < 5) {
    echo 'Your name must have at least 5 chars';
}

Logo, se você tiver que validar a mesma informação em dois locais diferentes, você recorre ao velho CTRL+C > CTRL+V..

Para evitar este tipo de coisa, eu geralmente uso regras de validação pré-determinadas, assim, se eu precisar re-utilizar a mesma regra em outro lugar, basta instanciar a classe e tá tudo certo. Por exemplo:

$user = new bean\User();
$user->setCpf('123132121321');
$user->setName('my name');
$user->setEmail('my@email.com');
 
// creating a validation list
$exec = new Executor();
$exec->addRule(new CPF('cpf', 'Invalid Brazilian CPf'));
$exec->addRule(new RequiredEmail('email','Invalid e-mail'));
$exec->addRule(new RequiredString('name','Supply your name with at least 4 chars', 4));
 
// executing 
$results = $exec->validate($user);
 
if(empty($results)){
     // ok, we're good to save in database
} else {
     echo 'Some errors occurred<br>';
     print_r($results);
}

Todos os erros encontrados na validação estão agora dentro da variável $results, indexados pelo nome da propriedade que gerou o erro. Logo, se ela estiver vazia, nenhum erro foi encontrado e você poderá prosseguir. Do contrário (tem algum valor), é só exibir ao usuário os erros encontrados.

Desta forma, facilita para enviar para a camada de visualização os erros encontrados, bem como posicioná-los de acordo com as necessidades.

Este formato pode ser aplicado à qualquer classe.

E o melhor: se eu precisar criar mais regras, eu não preciso refatorar/hackear códigos para suprir as necessidades – basta criar uma nova regra e aplicar no objeto em questão.

Os arquivos de exemplo podem ser baixados na área de downloads/exemplos.

@braços e fiquem com Deus!

Deixar uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

*

Pode usar estas etiquetas HTML e atributos: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">