Фильтрация данных
Это небольшой анонс новой функции библиотеки 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 ?: 'Значение по-умолчанию'}, ];
На вход она принимает значение из массива данных. В ней можно выполнить все необходимые манипуляции и вернуть обработанное значение назад.
Вот такой функций будет в новой версии. Мне кажется, разработчикам точно пригодится. Если есть предложения, давайте. Как говорится, одна голова хорошо...
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()