Filtro PHP

Resumo : neste tutorial, você aprenderá a definir uma filter()função PHP que limpa e valida dados.

Definir função PHP filter()

Nos tutoriais anteriores, você aprendeu como definir as funções sanitize()e validate()para limpar e validar dados.

A sanitize()função limpa dados com base em filtros especificados e retorna uma matriz que contém os dados limpos. Por exemplo:

$inputs = sanitize($_POST, [
    'name' => 'string',
    'email' => 'email'
]);Linguagem de código:  PHP  ( php )

A validate()função valida os dados com base nas regras e retorna um array que contém as mensagens de erro:

$errors = validate($inputs,[
    'name' => 'required | max: 255',
    'email' => 'required | email',
]);Linguagem de código:  PHP  ( php )

Essas funções funcionam bem. No entanto, é necessário especificar dois conjuntos de regras: regras de sanitização e regras de validação.

Para torná-los mais concisos, você pode definir uma filter()função que higienize e valide os dados com base na combinação das regras de higienização e validação:

function filter(array $data, array $fields, array $messages=[]): array
{
    // implementation
}Linguagem de código:  PHP  ( php )

Por exemplo:

[$inputs, $errors] = filter($_POST, [
    'name' => 'string | required | max: 255',
    'email' => 'email | required | email',
]);Linguagem de código:  PHP  ( php )

O namecampo possui a stringregra de filtro e a required | max: 255regra de validação neste código. Portanto, você precisa extrair as regras de filtro e validação de $rules.

$sanitization_rules = [];
$validation_rules = [];

foreach ($fields as $field => $rules) {
    if (strpos($rules, '|')) {
        [$sanitization_rules[$field], $validation_rules[$field] ] =  explode('|', $rules, 2);
    } else {
            $sanitization_rules[$field] = $rules;
    }
}Linguagem de código:  PHP  ( php )

Como funciona.

Primeiro, defina dois arrays que contêm as regras de sanitização e validação:

$sanitization_rules = [];
$validation_rules = [];Linguagem de código:  PHP  ( php )

Segundo, itere sobre o $fieldsarray. Para cada elemento, se $rulescontiver o |caractere, divida a $rulesstring usando o |separador em dois e atribua o primeiro elemento a $sanitization_rules[$field]e o segundo elemento a $validation_rules[$field]. Caso contrário, atribua as regras $ ao arquivo $sanitization_rules[$field].

Por exemplo, se você tiver os seguintes campos:

[
    'name' => 'string | required | max: 255',
    'email' => 'email | required | email',
]Linguagem de código:  PHP  ( php )

Será $sanitization_rules:

 [
    'name' => 'string',
    'email' => 'email',
]Linguagem de código:  PHP  ( php )

E validation_rulesserá:

[
    'name' => 'required | max: 255',
    'email' => 'required | email',
]Linguagem de código:  PHP  ( php )

Depois de ter as regras de sanitização e validação, você pode chamar a função sanitize()and validate()em sequência e retornar um array que contém as entradas sanitizadas e os erros de validação:

// ...
$inputs = sanitize($data, $sanitization_rules);
$errors = validate($inputs, $validation_rules, $messages);

return [$inputs, $errors];Linguagem de código:  PHP  ( php )

Aqui está a filter()função completa:

function filter(array $data, array $fields, array $messages=[]) : array
{
    $sanitization_rules = [];
    $validation_rules  = [];

    foreach ($fields as $field=>$rules) {
        if (strpos($rules, '|')) {
            [$sanitization_rules[$field], $validation_rules[$field] ] =  explode('|', $rules, 2);
        } else {
            $sanitization_rules[$field] = $rules;
        }
    }

    $inputs = sanitize($data, $sanitization_rules);
    $errors = validate($inputs, $validation_rules, $messages);

    return [$inputs, $errors];
}Linguagem de código:  PHP  ( php )

Use a função PHP filter()

O exemplo a seguir mostra como usar a filter()função:

<?php

require __DIR__ . '/filter.php';

$data = [
    'name' => '',
    'email' => 'john$email.com',
];

$fields = [
    'name' => 'string | required | max: 255',
    'email' => 'email | required | email'
];

[$inputs, $errors] = filter($data, $fields);

print_r($inputs);
print_r($errors);Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [name] => Please enter the name
    [email] => The email is not a valid email address
)Linguagem de código:  PHP  ( php )

Resumo

  • Use a função auxiliar PHP filter()para limpar e validar dados.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *