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 name
campo possui a string
regra de filtro e a required | max: 255
regra 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 $fields
array. Para cada elemento, se $rules
contiver o |
caractere, divida a $rules
string 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_rules
será:
[
'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.