In accordance with the documentation, there are two ways to create validations in GUMP
. We can use the static method GUMP::add_validator
or we can create our class and add the method validate_nossa_validacao
, for example.
Creating validations with the static method
To create a validation with the static method, just use:
GUMP::add_validator("nome_da_validacao", function($field, $input, $param = null) {
/* Verifica os dados */
return true; //Em caso de sucesso ou "false" em caso de falha.
});
Complete code:
<?php
/**
* Código responsável pela validação de CPF e data de nascimento para o GUMP (https://github.com/Wixel/GUMP)
* @author: Valdeir Psr
*/
require_once "vendor/autoload.php";
/**
* Criando validação do CPF
*
* @param $field Nome do campo que será validado
* @param $value Valores dos campos
*/
GUMP::add_validator("validate_cpf", function($field, $value) {
/* Adiciona mensagem de erro */
GUMP::set_error_messages(['validate_cpf' => 'O campo {field} é inválido']);
/**
* Trecho retirado do repositório https://github.com/Respect/Validation/blob/a3c945aa51041b7a479ee9482c69a0f059fc228e/library/Rules/Cpf.php
*/
$cpf = preg_replace('/\D/', '', $value[$field]);
if (strlen($cpf) != 11 || preg_match("/^{$cpf[0]}{11}$/", $cpf)) {
return false;
}
for ($s = 10, $n = 0, $i = 0; $s >= 2; $n += $cpf[$i++] * $s--);
if ($cpf[9] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {
return false;
}
for ($s = 11, $n = 0, $i = 0; $s >= 2; $n += $cpf[$i++] * $s--);
if ($cpf[10] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {
return false;
}
return true;
});
/**
* Criando validação da data de nascimento
*
* @param $field Nome do campo que será validado
* @param $value Valores dos campos
* @param $range Limite de idade. Ex: "18 25", irá verificar
* se o usuário possui entre 18 e 25 anos
*/
GUMP::add_validator("validate_data_nascimento", function($field, $value, $range = null) {
/**
* Caso você não informe a idade limite,
* verifica apenas a data
*/
if ($range === null) {
/* Adiciona mensagem de erro */
GUMP::set_error_messages(['validate_data_nascimento' => 'O campo {field} é inválido']);
/* Captura o dia, mês e ano, respectivamente */
list($day,$month,$year) = explode("/", $value[$field]);
return checkdate($month,$day,$year);
}
/* Caso contrário, verifica o limite */
else {
/* Separa os valores pelo espaço e captura-os */
@list($start,$end) = explode(" ", $range);
/* Captura a data atual */
$dateCurrent = new DateTime();
/* Converte a data do usuário para o objeto DateTime */
$dateUser = new DateTime( str_replace("/", "-", $value[$field]) );
/* Captura a diferença entre as datas */
$diff = $dateCurrent->diff($dateUser);
/* Verifica se o usuário está na idade limite */
return ($diff->y >= $start && ($diff->y <= $end || $end == null));
}
});
/* Validando os campos */
var_dump(GUMP::is_valid([
'cpf_valido' => '98584138072',
'cpf_invalido' => '12345678900',
'data_valida' => '28/02/2018',
'data_invalida' => '29/02/2018',
'idade_valida' => '01/02/2000',
'idade_invalida' => '01/02/2010',
'idade_valida2' => '01/02/1950',
'idade_invalida2' => '01/02/2019',
], [
'cpf_valido' => 'validate_cpf',
'cpf_invalido' => 'validate_cpf',
'data_valida' => 'validate_data_nascimento',
'data_invalida' => 'validate_data_nascimento',
'idade_valida' => 'validate_data_nascimento,18 24',
'idade_invalida' => 'validate_data_nascimento,18 24',
'idade_valida2' => 'validate_data_nascimento,18',
'idade_invalida2' => 'validate_data_nascimento,18 99',
])
);
Code taken from the website: https://gist.github.com/valdeir2000/507cffbfbdc9ab9920701a1bbba43441#file-gump_validator_static-php
Creating validator with classes
Here we need to create a class and then extend the class GUMP
, for example:
class ValidatorPsr extends GUMP {
/**
* Criando validação do CPF
*
* @param $field Campo a ser validado
* @param $value Valores dos campos
* @param $param Parâmetro utilizado após a vírgula
*/
public function validate_nome_da_validacao($field, $value, $param = null)
{
/* Utilizamos nosso código para validação */
/* Em caso de erro, DEVEMOS retornar */
return array(
'field' => $field,
'value' => $value,
'rule' => __FUNCTION__,
'param' => null,
);
}
It is important that your validator name starts with validate_
In this anonymous function, we receive three parameters:
$field
: The name of the field that will be validated
$input
: The values to be validated
$param
: The parameter that can be passed after the comma.
In the example below, I create the validation functions and comment the necessary lines:
Follow the complete and commented code:
<?php
/**
* Código responsável pela validação de CPF e data de nascimento para o GUMP (https://github.com/Wixel/GUMP)
* @author: Valdeir Psr
*/
require_once "vendor/autoload.php";
class ValidatorPsr extends GUMP {
/**
* Criando validação do CPF
*
* @param $field Campo a ser validado
* @param $value Valores dos campos
*/
public function validate_cpf($field, $value)
{
/* Adiciona mensagem de erro */
GUMP::set_error_messages(['validate_cpf' => 'O campo {field} é inválido']);
/**
* Trecho retirado do repositório https://github.com/Respect/Validation/blob/a3c945aa51041b7a479ee9482c69a0f059fc228e/library/Rules/Cpf.php
*/
$cpf = preg_replace('/\D/', '', $value[$field]);
if (strlen($cpf) != 11 || preg_match("/^{$cpf[0]}{11}$/", $cpf)) {
return array(
'field' => $field,
'value' => $value,
'rule' => __FUNCTION__,
'param' => null,
);
}
for ($s = 10, $n = 0, $i = 0; $s >= 2; $n += $cpf[$i++] * $s--);
if ($cpf[9] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {
return array(
'field' => $field,
'value' => $value,
'rule' => __FUNCTION__,
'param' => null,
);
}
for ($s = 11, $n = 0, $i = 0; $s >= 2; $n += $cpf[$i++] * $s--);
if ($cpf[10] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {
return array(
'field' => $field,
'value' => $value,
'rule' => __FUNCTION__,
'param' => null,
);
}
return true;
}
/**
* Criando validação da data de nascimento
*
* @param $field Campo a ser validado
* @param $value Valores dos campos
* @param $range Limite de idade. Ex: "18 25", irá verificar
* se o usuário possui entre 18 e 25 anos
*/
public function validate_data_nascimento($field, $value, $range = null)
{
/**
* Caso você não informe a idade limite,
* verifica apenas a data
*/
if ($range === null) {
/* Adiciona mensagem de erro */
GUMP::set_error_messages(['validate_data_nascimento' => 'O campo {field} é inválido']);
/* Captura o dia, mês e ano, respectivamente */
list($day,$month,$year) = explode("/", $value[$field]);
if (!checkdate($month,$day,$year)) {
return array(
'field' => $field,
'value' => $value,
'rule' => __FUNCTION__,
'param' => null,
);
}
}
/* Caso contrário, verifica o limite */
else {
/* Separa os valores pelo espaço e captura-os */
@list($start,$end) = explode(" ", $range);
/* Captura a data atual */
$dateCurrent = new DateTime();
/* Converte a data do usuário para o objeto DateTime */
$dateUser = new DateTime( str_replace("/", "-", $value[$field]) );
/* Captura a diferença entre as datas */
$diff = $dateCurrent->diff($dateUser);
/* Verifica se o usuário está na idade limite */
if (!($diff->y >= $start && ($diff->y <= $end || $end == null))) {
return array(
'field' => $field,
'value' => $value,
'rule' => __FUNCTION__,
'param' => null,
);
}
}
}
}
/* Validando os campos */
$validator = new ValidatorPsr();
var_dump( $validator->validate([
'cpf_valido' => '98584138072',
'cpf_invalido' => '12345678900',
'data_valida' => '28/02/2018',
'data_invalida' => '29/02/2018',
'idade_valida' => '01/02/2000',
'idade_invalida' => '01/02/2010',
'idade_valida2' => '01/02/1950',
'idade_invalida2' => '01/02/2019',
], [
'cpf_valido' => 'cpf',
'cpf_invalido' => 'cpf',
'data_valida' => 'data_nascimento',
'data_invalida' => 'data_nascimento',
'idade_valida' => 'data_nascimento,18 24',
'idade_invalida' => 'data_nascimento,18 24',
'idade_valida2' => 'data_nascimento,18',
'idade_invalida2' => 'data_nascimento,18 99',
]) );
Code taken from the website: https://gist.github.com/valdeir2000/507cffbfbdc9ab9920701a1bbba43441