Validando os dados do formulário com Zend-Validator

Olá, tudo bem?!

Todas aplicações que desenvolvemos necessita de entradas e saídas de dados, isso é muito comum, porém cada desenvolvedor acaba implementando a “sua solução” para esse problema. Definitivamente essa não é uma boa prática por diversos motivos.

O mais recomendado é a utilização de componentes criados pela comunidade, porque devo usar um componente? Simples, irei listar algumas das principais vantagens, sendo:

  1. Grande volume de contribuidores.
  2. Maior correção de bugs.
  3. Implementações de melhorias contantes.
  4. Solução robusta.
  5. Testada por diversos usuários (programadores).

O componente zend-validator

Neste post irei apresentar um poderoso componente criado pela Zend e mantido pela comunidade, seu nome é zend-validator.

Ele suporta uma lista de validadores, que cobre grande parte das nossas necessidades do dia a dia, a seguir podemos observar a lista de validadores.

  • Validadores
    • Barcode
    • Between
    • Callback
    • CreditCard
    • Date
    • Db\RecordExists and Db\NoRecordExists
    • Digits
    • EmailAddress
    • Explode
    • GreaterThan
    • Hex
    • Hostname
    • Iban
    • Identical
    • InArray
    • Ip
    • Isbn
    • IsCountable
    • IsInstanceOf
    • LessThan
    • NotEmpty
    • Regex
    • Sitemap
    • Step
    • StringLength
    • Timezone
    • Uri
    • Uuid
  • File Validators
    • Intro
    • Count
    • Crc32
    • ExcludeExtension
    • ExcludeMimeType
    • Exists
    • Extension
    • FilesSize
    • Hash
    • ImageSize
    • IsCompressed
    • IsImage
    • Md5
    • MimeType
    • NotExists
    • Sha1
    • Size
    • Upload
    • UploadFile
    • WordCount

Como podemos observar, o componente dispõem de uma vasta lista a nossa disposição. Caso ocorra de não conter  um validador que você necessite, pode ser criado validadores, eu mesmo criei um pacote validators_zf, responsável por validar CPF, CNPJ e Data (pt-BR).

Demonstração prática

Será implementado uma estrutura simples, para que possamos realizar a validação dos dados submetidos por meio de um formulário.

Lembrando que neste exemplo utilizaremos um formulário, porém os princípios são os mesmos para validar qualquer entrada de dados.

Vamos emular o seguinte cenário, sendo:

  1. Teremos um formulário com nome, e-mail, e idade.
  2. Ao realizar o submit (POST) devemos capturar e validar cada input.
  3. Após validação devemos analisar o resultado.
  • Regras de validação para cada input.
    • nome
      • Máximo de caracteres 150.
      • Mínimo de caracteres 05.
      • Campo obrigatório.
    • email
      • Máximo de caracteres 200.
      • Mínimo de caracteres 10.
      • Campo obrigatório.
      • Deve ser um e-mail válido.
    • idade
      • Entre 0 e 120 anos.
      • Campo obrigatório.
      • Deve aceitar somente números.

Para agilizar a realização do projeto, faça o download da estrutura base que preparei diegobrocanelli-post-zend-validator.

  • diegobrocanelli-post-zend-validator
    • src
      • Validator
        • User.php
    • view
      • form.html
    • composer.json
    • index.php

Após download realizado, descompacte o projeto no diretório desejado, acesse sua raiz pelo terminal e execute o comando abaixo para validação do projeto:

Após execução do servidor embutido do PHP, acesse um navegador de sua preferência inserindo a seguinte URL, sendo:

Como resultado devemos obter:

Estou utilizando a versão 7.2 do PHP, porém a adaptação para projetos inferiores é simples. Neste pacote que foi realizado o download já consta os componentes devidamente instalados, onde pode ser observado no arquivo composer.json.

No arquivo composer.json foi definido a namespace base DiegoBrocanelli, utilizaremos ela para criar nossa classe de validação mais a frente.

Abra o projeto no seu editor de preferencia e acesse a classe src/Validator/User.php.

Devemos definir a namespace da classe, para isso insira o seguinte código.

Agora deve ser importado os pacotes que serão utilizados, sendo:

Deve-se ser declarado a estrutura da classe, sendo:

Após a criação do método construtor, será implementado o primeiro validador referente ao para o campo nome, para isso como a classe User herda a classe InputFilter a mesma dispões do método add() onde será definido o validador .

Devemos agora implementar o validador para campo de e-mail.

Por último, implementar o validador para o campo idade.

Como resultado a implementação deve ficar semelhante ao apresentado abaixo, sendo:

Apos implementação da camada de validação, será implementado as regras no arquivo index.php para consumo da classe de validação.

Basicamente é se a request é POST, em seguida capturamos os valores do formulário.

Em seguida é instanciado o validador User e por meio do método setData() passado os valores obtidos do formulário.

Para validar os dados basta chamar o método isValid() do validador.

Para recuperar as mensagens de erro deve ser utilizado o método getMessages().

O projeto encontra-se finalizado e pronto para seu uso.

Considerações finais

Pudemos observar na prática como foi simples criar a camada de validação e consumi-lo.

As mensagens por padrão são em inglês, é possível traduzi-las de forma automática, caso tenham interesse deixem nos comentários.

Podemos também somar o uso do validator com o zend-form e zend-view, onde por exemplo as mensagens de erro já são inseridos abaixo do seu respectivo input.

Validar dados é fundamental e toda aplicação necessita de ser feita, com o zend validator essa tarefa fica muito mas simples e descomplicada.

Agradeço pela atenção, espero que o conteúdo do post agregue valor em seu dia a dia.

Até a próxima e sucesso nos projetos.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *