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; }
/** * @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; }