Фильтрация данных в новой версии modHelpers

Это небольшой анонс новой функции библиотеки modHelpers, которая обрабатывает входящие данные и преобразует их к нужному типу. Это пригодится для обработки данных HTML форм. Идея навеяна суперским инструментом Laravel под названием сервис-контейнер. Причём пришла она ко мне сегодня в 4 утра, дабы уже не спал и смотрел на часы, и я решил её быстренько забабахать. Решил, сделал. Как оно будет, объясню ниже.

Функция filter_data()

Функция принимает 3 параметра:
  • Массив данных — например, $_POST.
  • Массив правил.
  • Флаг, который определяет как возвращать данные — весь массив данных или только отфильтрованные данные.
С первым параметром думаю понятно. А со вторым параметром давайте познакомимся поближе. В нём нужно указать типы данных. Давайте разберём на примере
# Данные из формы
// $_POST = ['id' => '5', 'name' => '   John', 'fullname' => '   Silver   ', 'checkbox1' => 'on']
$rules = [
	'id' => 'int', // Приводит к типу integer значение из $_POST['id']
	'name' => 'string', // Удаляет теги и пробелы (trim) из $_POST['name']
	'checkbox1' => 'bool',  // Обрабатывает значение чекбокса $_POST['checkbox1']
	'checkbox2' => 'bool'  //  Обрабатывает значение чекбокса $_POST['checkbox2']
];
// Выводит всё (fullname присутствует и не отфильтрован)
$filteredData = filter_data($_POST, $rules);
//  ['id' => 5, 'name' => 'John', 'fullname' => '   Silver   ', 'checkbox1' => true, 'checkbox2' => false]

// Выводит только отфильтрованные (fullname отсутствует)
$filteredData = filter_data($_POST, $rules, true);
//  ['id' => 5, 'name' => 'John', 'checkbox1' => true, 'checkbox2' => false]
Думаю, пример достаточно наглядный. Правило bool удобно для работы с чекбоксами — для значений «1», «true», «on» и «yes» вернётся TRUE, в противном случае FALSE.

Привести данные можно также к типу array и float. Но самое интересное — можно указать название класса, и функция загрузит объект этого класса.
// $_POST = ['user' => '5', 'name' => '   John', 'fullname' => '   Silver   ', 'checkbox1' => 'on']
$rules = [
	'user' => 'modUser',
];
$filteredData = filter_data($_POST, $rules);
// $filteredData['user']  - это теперь объект класса modUser с id 5.
Именно так работает разрешение объектов в запросах в Laravel.

Ну и наконец, можно самому указать условие через анонимную функцию
$rules = [
	'some' => function($value) {return $value ?: 'Значение по-умолчанию'},
];
На вход она принимает значение из массива данных. В ней можно выполнить все необходимые манипуляции и вернуть обработанное значение назад.

Вот такой функций будет в новой версии. Мне кажется, разработчикам точно пригодится. Если есть предложения, давайте. Как говорится, одна голова хорошо…
Сергей Шлоков
10 августа 2017, 05:28
modx.pro
1
1 089
+10
Поблагодарить автора Отправить деньги

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0