| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Trandução da Documentação do Respect\Validation
O mecanismo de validação mais impressionante criado em PHP.
O pacotes estão disponiveis no PEAR e Composer. Autoloading é compativel com PSR-0.
Respect\Validation é namespace, mas você pode tornar sua vida mais fácil importando apenas a classe em seu contexto:
<?php use Respect\Validation\Validator as v;
O Hello World do validador é somente isto:
$number = 123; v::numeric()->validate($number); //true
É possivel utilizar os validadores em cadeias(chain). O exemplo abaixo valida um conjunto de caracteres que contém números e letras, sem espaços e está entre 1 e 15:
$usernameValidator = v::alnum()->noWhitespace()->length(1,15);
$usernameValidator->validate('alganet'); //true
Dados o simples Objeto a seguir:
$user = new stdClass; $user->name = 'Alexandre'; $user->birthdate = '1987-07-01';
É possivel validar seu atributos em uma única chain:
$userValidator = v::attribute('name', v::string()->length(1,32))
->attribute('birthdate', v::date()->minimumAge(18));
$userValidator->validate($user); //true
Validar chaves de array também é possivel utilizando v::key()
Note que usamos v::string() e v::date() no inicio do validador. Embora não seja obrigatório, é uma boa prática usar o tipo do objeto validado como o primeiro nós na cadeia(chain).
Todos os validadores tratam a entrada como opcional e aceitarão cadeia de caracteres válidos vazia, salvo alguma indicação contrária na documentação.
Nós usamos o validador v:notEmpty() prefixado para não permitir a entrada vazia e efetivamente definimos o campo como obrigatório, os inputs serão requeridos ou a validação falhará.
v::string()->notEmpty()->validate(''); //false input required
Você pode usar v::not() para negar qualquer regra:
v::not(v::int())->validate(10); //false, input must not be integer
Uma vez criado, você pode reutilizar seu validador em qualquer lugar. Lembra $usernameValidator?
$usernameValidator->validate('respect'); //true
$usernameValidator->validate('alexandre gaigalas'); //false
$usernameValidator->validate('#$%'); //false
Quando algo está errado, o Validation pode dizer o que esta acontecendo exatamente. Para isso usamos o método assert() em vez de validate():
try {
$usernameValidator->assert('really messed up screen#name');
} catch(\InvalidArgumentException $e) {
echo $e->getFullMessage();
}
A mensagem impressa é exatamente esta, como uma árvore de texto:
\-All of the 3 required rules must pass |-"really messed up screen#name" must contain only letters (a-z) and digits (0-9) |-"really messed up screen#name" must not contain whitespace \-"really messed up screen#name" must have a length between 1 and 15
A árvore de texto lançada pela exception é bom, mas inútilizável em um formulário html ou algo mais personalizado. Você pode usar o findMessages() para isso:
try {
$usernameValidator->assert('really messed up screen#name');
} catch(\InvalidArgumentException $e) {
var_dump($e->findMessages(array('alnum', 'length', 'noWhitespace')));
}
findMessages() retorna um array com as mensagens do validadores solicitados.
Pegar as mensagens como array é muito legal, mas as vezes você precisa customiza-las para poder apresentar aos usuários. Isto é possivel utilizando o método findMessages() assim:
$errors = $e->findMessages(array(
'alnum' => '{{name}} must contain only letters and digits',
'length' => '{{name}} must not have more than 15 chars',
'noWhitespace' => '{{name}} cannot contain spaces'
));
Para todas as mensagens, a variável {{name}} e {{input}} estão disponiveis para o template.
-- Em v::attribute() e v::key(), {{name}} é o nome do attribute/key. Você pode customizar um validador usando um nome:
v::date('Y-m-d')->between('1980-02-02', 'now')->setName('Member Since');
É possivel utilizar também validadores de outros frameworks, se eles estiverem devidamente instalados:
$hostnameValidator = v::zend('Hostname')->assert('google.com');
$timeValidator = v::sf('Time')->assert('22:00:01');
Já vimos o validate() que retorna true ou false e assert() que lança um relatório de validação completa. Há também um método chamado check() que retorna uma exceção com o primeiro erro encontrado apenas:
try {
$usernameValidator->check('really messed up screen#name');
} catch(\InvalidArgumentException $e) {
echo $e->getMainMessage();
}
Mensagem:
"really messed up screen#name" must contain only letters (a-z) and digits (0-9)
Irá validar se todos os validadores internos forem válidos:
v::allOf(
v::int(),
v::positive()
)->validate(15); //true
Isto é semelhante a cadéia, porém sua sintaxe permite definir nomes personalizados para cada nó:
v::allOf(
v::int()->setName('Account Number'),
v::positive()->setName('Higher Than Zero')
)->setName('Positive integer')
->validate(15); //true
Veja também:
Validadores de caracteres alfanumérico de a-Z e 0-9.
v::alnum()->validate('foo 123'); //true
Um parâmetro para caracteres extras, também pode ser adicionado:
v::alnum('-')->validate('foo - 123'); //true
Este validador permite espaços em branco, caso você queira removê-los, acrescente o método ->noWhitespace() a cadeia:
v::alnum()->noWhitespace->validate('foo 123'); //false
Por default os valores vazios(empty) são aceitos, caso você queira invalidá-los, adicione o método ->notEmpty() à cadeia:
v::alnum()->notEmpty()->validate(''); //false
Você pode restringir os casos usando os validadores ->lowercase() e ->uppercase():
v::alnum()->uppercase()->validate('aaa'); //false
Template message para este validador inclui {{additionalChars}} com uma cadéia de caracteres passadas como parâmetros.
Veja também:
| Back | FazBrowse Home | New Git URL |