Ir para o conteúdo principal
Github

Validação

O Validator é uma classe de validação de dados que ajuda a minimizar a quantidade de código que você precisará escrever.

Validando

Validando POST:

use Inphinit\Experimental\Utility\Validator; $validator = Validator::post(); $validator->field('name', $name, 'required|min:5|max:15|regex:/^\S+$/'); $validator->field('surname', $surname, 'min:5|max:50'); // strings como yes, true e 1 retornam bool(true) // strings como no, false e 0 retornam bool(false) // Outros valores retornam null $validator->field('active', $active, 'required|bool'); if ($validator->valid()) { echo 'Nome: ', htmlentities($name); if ($surname !== null) { echo ' ', htmlentities($surname); } echo '<br>'; echo $active ? '✔️' : '❌'; } else { foreach ($validator->failures() as $failure) { echo '<div class="error"><p>', $failure, '</p></div>'; } }

Validando GET:

use Inphinit\Experimental\Utility\Validator; $validator = Validator::get(); $validator->field('query', $query, 'min:5'); $validator->field('type', $type, 'in:electronics,motors,fashion,sports'); $validator->field('sold', $sold, 'bool'); if ($validator->valid()) { ... }

Validando Arrays e JSONs

use Inphinit\Experimental\Utility\Validator; $arr = [ 'foo' => [ 'bar' => [ 'baz' => '...', ] ] ]; $validator = new Validator($arr); $validator->field('foo.bar.baz', $phone, 'required|regex:/^(?:55)?([1-9]{2})(9?[2-9]\d{3}\d{4})$/'); if ($validator->valid()) { ... }
use Inphinit\Http\Request; use Inphinit\Experimental\Utility\Validator; $app->action('POST', '/receive', function () { $body = file_get_contents('php://input'); if (strlen($body) < 1) { Request::status(400); return 'Invalid request'; } $decoded = json_decode($body, true); if (json_last_error() !== JSON_ERROR_NONE || is_array($body) === false) { Request::status(400); return 'Invalid body'; } $validator = new Validator($decoded); ... });

Regras de validação

Antes de validar, os valores são convertidos para string:

Regra Combinações Descrição
bool Pode ser combinado com in e required Valores de string como yes, true, 1, no, false e 0
decimal Pode ser combinado com in, regex, min, max e required Valida se o campo recebeu uma string de numeração decimal. O separador pode ser ajustado usando: decimal:., decimal:,, decimal:'
digit Pode ser combinado com in, regex, min, max e required Valida se o campo recebeu uma string escrita como numero inteiro
email Pode ser combinado com in, regex, min, max e required Valida URL usando FILTER_VALIDATE_EMAIL
in: Pode ser combinado com in, regex, min, max e required Verifica se o valor do campo é um dos valores da lista, exemplo: in:foo,bar,baz
ip Pode ser combinado com in, regex, min, max e required Valida URL usando FILTER_VALIDATE_IP
max:<n> Se usado com decimal e digit, irá comparar diretamente com o valor do campo: campo <= max; para as outras regras irá comparar com a quantidade caracteres: strlen(campo) <= max
min:<n> Se usado com decimal e digit, irá comparar diretamente com o valor do campo: campo >= min; para as outras regras irá comparar com a quantidade caracteres: strlen(campo) >= min
regex:<n> Valida o campo com uma expressão regular customizada, examplo: regex:/^[A-Z]+$/
required Pode ser combinado com todas regras Torna o campo em obrigatório
url Pode ser combinado com in, regex, min, max e required Valida URL usando FILTER_VALIDATE_URL e verificando se o esquema é https ou http

Customizando as mensagens

Por padrão as mensagens de falha vem em inglês, mas é possivel modifica-las, e configura-las com qualquer sistema de idiomas que usar, como por exemplo Gettext.

O primeiro %s contém o nome ou o caminho do campo. Quanto às mensagens que contêm mais de um %s, seguem as explicações:

Mensagem Padrão Nota
bool %s can have values such as Yes, True, 1, No, False, and 0
decimal %s expects a decimal format
digit %s expects a digit format
email %s expects a valid email
in %s has an unexpected value
ip %s expects a valid IP
max %s expects a maximum %s of %s O segundo %s representa o tipo e o terceiro o valor máximo
min %s expects a minimum %s of %s O segundo %s representa o tipo e o terceiro o valor minimo
regex %s does not match the expected format
required %s is required
type %s contains an unexpected type
unicode_error %s contains invalid Unicode characters Não faz parte da validação, mas em casos que um campo tem caracteres com problema, isso é tratado com uma das falhas, ao invés de uma exceção, para evitar quebras.
url %s expects a valid url

Exemplo de customização com gettext:

$validator = Validator::post(); $validator->setMessage('bool', _('boolId')); $validator->setMessage('decimal', _('decimalId')); $validator->setMessage('digit', _('digitId')); $validator->setMessage('email', _('emailId')); $validator->setMessage('in', _('inId')); $validator->setMessage('ip', _('ipId')); $validator->setMessage('max', _('maxId')); $validator->setMessage('min', _('minId')); $validator->setMessage('regex', _('regexId')); $validator->setMessage('required', _('requiredId')); $validator->setMessage('type', _('typeId')); $validator->setMessage('unicode_error', _('unicode_errorId')); $validator->setMessage('url', _('urlId'));

O arquivo .po deve conter algo como:

msgid "boolId" msgstr "O valor deve ser yes ou no." msgid "decimalId" msgstr "O valor deve ser um número decimal."