function sanitize(array $data, array $rules, array &$errors = null)
{
    $errors = is_array($errors) ? $errors : [];
    //если приходит не массив, то превратить в массив
    //1. этап - подготовка правил валидации / фильтрации
    foreach ($rules as $attribute => $rule) {
        $rule['flags'] = isset($rule['flags']) ? $rule['flags'] | FILTER_NULL_ON_FAILURE : FILTER_NULL_ON_FAILURE;
        $rule['required'] = isset($rule['required']) ? (bool) $rule['required'] : false;
        $rule['message'] = isset($rule['message']) ? $rule['message'] : '';
        $rules[$attribute] = $rule;
    }
    //var_dump($rules);
    //2. этап - непосредственно валидации / фильтрации
    $data = array_map('trim', $data);
    $filterData = filter_var_array($data, $rules);
    foreach ($filterData as $attribute => $value) {
        $rule = $rules[$attribute];
        if (is_null($value)) {
            if ($data[$attribute] || $data[$attribute] === '' && $rule['required']) {
                sanitizeAddError($attribute, $rule['message'] ?: 'Некорректное значение в поле {attribute}', $errors);
            }
        }
        if (is_string($value)) {
            $value = trim($value);
            //обрезаем пробелы,если есть лишние
            $filterData[$attribute] = $value;
            if (!$value && $rule['required']) {
                sanitizeAddError($attribute, $rule['message'] ?: 'Не заполнено обязательное поле {attribute}', $errors);
            }
        }
    }
    return $filterData;
}
예제 #2
0
/**
 * @param array $data исходные данные.
 * @param array $rules правила валидации.
 * @param array $errors ошибки, возникшие в ходе проверок.
 * @return array возвращает очищенные и отвалидированные данные согласано указанным правилам.
 * @link http://php.net/manual/ru/function.filter-var-array.php
 */
function sanitize(array $data, array $rules, &$errors = null)
{
    $errors = is_array($errors) ? $errors : [];
    foreach ($rules as $key => $rule) {
        $rule['flags'] = isset($rule['flags']) ? $rule['flags'] | FILTER_NULL_ON_FAILURE : FILTER_NULL_ON_FAILURE;
        $rule['required'] = isset($rule['required']) ? (bool) $rule['required'] : false;
        $rule['message'] = isset($rule['message']) ? $rule['message'] : '';
        $rules[$key] = $rule;
    }
    $data = array_map('trim', $data);
    $filteredData = filter_var_array($data, $rules);
    foreach ($filteredData as $attribute => $value) {
        $rule = $rules[$attribute];
        if (is_null($value)) {
            if ($data[$attribute] || $data[$attribute] === '' && $rule['required']) {
                sanitizeAddError($attribute, $rule['message'] ?: 'Не корректное значение в поле "{attribute}".', $errors);
            }
        }
        if (is_string($value)) {
            $value = trim($value);
            $filteredData[$attribute] = $value;
            if (!$value && $rule['required']) {
                sanitizeAddError($attribute, $rule['message'] ?: 'Не заполнено обязательное поле "{attribute}".', $errors);
            }
        }
    }
    return $filteredData;
}