Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works
Anything · Lazarus or Delphi
Random projectRandom project

Validator4D

View on GitHub

Member rating

No ratings yet.

Sign in to rate this project.

README

Validator4D 🛡️

Validação de dados elegante, fluida e baseada em Atributos (RTTI) para Delphi.

O Validator4D permite que você mantenha as suas regras de validação acopladas diretamente às suas Entidades e DTOs, mantendo o seu código limpo, declarativo e livre de intermináveis blocos de if/else. Feito sob medida para projetos que utilizam Clean Architecture.

⚡ Recursos

  • Zero Acoplamento: Suas regras de validação ficam na própria entidade usando Atributos.
  • Baseado em RTTI: Validação dinâmica e invisível em tempo de execução.
  • Extensível: Crie seus próprios atributos de validação customizados com facilidade.
  • Lista de Erros Completa: Retorna todas as falhas de validação de uma vez, ideal para APIs REST.

📦 Instalação

Via Vite4D (Recomendado)

Se você estiver utilizando o CLI Vite4D para gerenciar seu projeto, basta rodar o comando abaixo no seu terminal para injetar o Validator4D automaticamente na sua pasta modules:

bash
v4d install validator

Instalação Manual

  1. Faça o download do repositório.
  2. Adicione a pasta src (ou os arquivos .pas) ao Search Path do seu projeto Delphi.

🚀 Como Usar

1. Anotando sua Entidade

Adicione a unit Validator4D.Attributes na seção uses e decore as propriedades da sua classe com as regras de negócio:

pascal
uses
  Validator4D.Attributes;

type
  TUsuario = class
  private
    FNome: string;
    FEmail: string;
    FIdade: Integer;
  public
    [NotNull('O nome é obrigatório')]
    [MinLength(3, 'O nome deve ter no mínimo 3 caracteres')]
    property Nome: string read FNome write FNome;

    [Email('E-mail em formato inválido')]
    property Email: string read FEmail write FEmail;

    [MinValue(18, 'O usuário deve ser maior de idade')]
    property Idade: Integer read FIdade write FIdade;
  end;

2. Validando o Objeto

Utilize o TValidator (da unit Validator4D.Core) para processar as regras. Ele retorna um IValidationResult contendo a lista de erros, caso existam.

pascal
uses
  Validator4D.Core, Validator4D.Types;

var
  LUsuario: TUsuario;
  LResult: IValidationResult;
begin
  LUsuario := TUsuario.Create;
  try
    LUsuario.Nome := 'Pa';
    LUsuario.Email := 'email_invalido.com';
    LUsuario.Idade := 15;

    LResult := TValidator.Validate(LUsuario);

    if not LResult.IsValid then
    begin
      // Retorna todos os erros formatados e separados por quebra de linha
      ShowMessage(LResult.GetErrorsAsString);
      
      // Ou você pode iterar sobre a lista LResult.Errors para tratar individualmente
    end;
  finally
    LUsuario.Free;
  end;
end;

🛠️ Atributos Nativos Disponíveis

Atributo Descrição Exemplo de Uso
[NotNull] Garante que o valor (ou objeto) não seja nulo. [NotNull('Obrigatório')]
[NotEmpty] Garante que a string não esteja vazia ou com espaços. [NotEmpty('Não pode ser vazio')]
[MinLength] Tamanho mínimo para strings. [MinLength(5)]
[MaxLength] Tamanho máximo para strings. [MaxLength(50)]
[MinValue] Valor numérico mínimo (Double/Integer). [MinValue(18)]
[MaxValue] Valor numérico máximo (Double/Integer). [MaxValue(100)]
[Email] Valida se a string é um e-mail válido via Regex. [Email('E-mail inválido')]
[Regex] Valida a string contra uma expressão regular customizada. [Regex('^[0-9]+$', 'Apenas números')]

👨‍💻 Autor

Criado e mantido por Paulo Roberto Alves.

📄 Licença

Este projeto está licensed sob a licença MIT - veja o arquivo LICENSE para mais detalhes.