FastSitePHP\Data\Validator

FastSitePHP Data Validation API

For many apps validating client side (webpage or app) provides instant feedback to users and limits need for extra web request, however users can bypass validation by using DevTools or other methods so for data that needs to be validated using server-side validation is important.

This class allows for many rules to be easily defined and run against an object (or Associative Array/Dictionary).

Common rules can simply be copied from HTML Input controls.

Código Fonte

GitHub

Código de Exemplo

Valiando Entradas de Usuário

// Para muitos apps validação client side (webpage ou app) fornece retorno
// imediato para usuários e limita a necessidade de requisição web extra,
// porém usuários podem iludir a validação utilizando DevTools ou outros
// métodos, então para os dados que precisam ser validados utilizar
// validação server-side é importante.

// O FastSitePHP provê uma classe que permite que várias regras sejam
// facilmente definidas e rodem contra um objeto (ou Array
// Associativo/Dicionário).

// Regras comuns podem ser copiadas de forma simples de controles Input HTML.

// HTML Exemplo:
/*
    <input name="nome" title="Nome" required>
    <input name="idade" title="Idade" required min="13" max="99">
    <input name="telefone" title="Telefone" pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}">
*/

// O Código do FastSitePHP Code para Validar Postagem de Formulário
// utilizando o HTML acima.
// Campos de Postagem de Formulários vem na array PHP Superglobal [$_POST]
// e isso pode ser simplesmente passado para a classe [Validator].
$v = new \FastSitePHP\Data\Validator();
$v->addRules([
    // Campo,  Título,  Regras
    ['nome',  'Nome',  'required'],
    ['idade',   'Idade',   'required min="13" max="99"'],
    ['telefone', 'Telefone', 'pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}"'],
]);
list($errors, $fields) = $v->validate($_POST);
if ($errors) {
    // Lógica de Erros
    // [$errors] retorna uma array de mensagens de erro para o usuário final
    // [$fields] retorna uma array de campos únicos que tiveram um erro em
    // conjunto com uma array de mensagens de erro para cada campo.
    // Campos pode ser utilizados pelo app cliente para evidenciar campos de
    // formulário, etc.
}

// Além da utilização de strings para as regras você pode também utilizar
// arrays. Isso pode conceder melhor desempenho se você tiver um site de
// alto tráfego, contudo, isso roda de forma muito rápida de qualquer forma.
$v = new \FastSitePHP\Data\Validator();
$v->addRules([
    ['nomes',  'Nome',  ['required' => true]],
    ['idade',   'Idade',   [
        'required' => true,
        'min' => '13',
        'max' => '99',
    ]],
    ['telefone', 'Telefone', ['pattern' => '[0-9]{3}-[0-9]{3}-[0-9]{4}']],
]);

// A classe Validator suporta um número de regras HTML5 juntamente com
// algumas regras personalizadas:
//     'exists', 'required', 'type', 'minlength', 'maxlength',
//     'length', 'min', 'max', 'pattern', 'list',

// A regra [type] suporta vários tipos de dados HTML5, junto com muitos
// tipos de dados personalizados:
//      'text', 'password', 'tel', 'number', 'range', 'date',
//      'time', 'datetime', 'datetime-local', 'email', 'url',
//      'unicode-email', 'int', 'float', 'json', 'base64',
//      'base64url', 'xml', 'bool', 'timezone', 'ip', 'ipv4',
//      'ipv6', 'cidr', 'cidr-ipv4', 'cidr-ipv6',

// Além das regras padrão, regras personalizadas pode ser definidas
// utilizando funções callback que retornam true/false ou uma string de
// mensagem personalizada de erro
$v = new \FastSitePHP\Data\Validator();
$v
    ->addRules([
        ['site_user',     'Site User', 'check-user required'],
        ['site_password', 'Password',  'check-password required'],
    ])
    ->customRule('check-user', function($value) {
        return ($value === 'admin');
    })
    ->customRule('check-password', function($value) {
        return ($value === 'secret' ? true : 'Senha Inválida');
    });

list($errors, $fields) = $v->validate($_POST);

Métodos

addRules(array $rules)

Add an array of rules for use with the [validation()] function in the format of [Field, Display_Name, Rules].

Field = String of the Array Key or Object Property to validate Display_Name = Field Name to include on Error Text for User - String or Null to use Field Name Rules = String of rules to be parsed or an array of defined rules

Retorna: $this

customRule($name, \Closure $callback)

Define a Custom Rule using a callback function for use with the [validation()] function.

The name must contain a dash '-' character and cannot contain spaces [ ], quotes ["], or equals [=] characters.

Examples of valid rule names:
    'custom-rule'
    'check-password'
    'db-unique-email'

Retorna: $this

supportedRules()

Return an array of standard rules supported by this class.

Retorna: array

supportedTypes()

Return an array of types supported the [type] rule.

Retorna: array

errorText(array $error_text = null)

Propriedade Getter / Setter

Get or set an Array of error message templates used when validation fails. All error text can be overridden by the calling application.

Different data types for the [type] validation can have specific messages under the 'types' option. See a full list of types in the function [supportedTypes()].

To customize text for your applications simply copy and modify the array from this function's source code.

Retorna: array | $this

validate($data)

Validate an object using rules defined from [addRules() or customRule()].

The object to validate, must be either an Associative Array (Dictionary) or an Object

Returns an array of ( error_messages[], error_fields[] ) where
    error_messages[] = Error Messages to Display to End Users
    error_fields[]   = Dictionary with each field that had an error and an array of error messages for the field. If count(error_messages[]) = 0 then all validations passed.

Retorna: array

checkType($value, $type)

Return [true] if valid - Value matches the specified data type.

This function is marked public for validation with Unit Testing. Calling [validate()] after [addFields(), etc] is the intended use of this class.

Retorna: bool