Может войдёшь?
Черновики Написать статью Профиль

Предварительная обработка входящих данных

laravel 5 request input middleware

Не знаю как у вас, но у меня возникала очень неприятная ситуация, когда пользователь случайно вводил лишний пробел в конце или вначале, а потом не мог получить доступ к своему профилю. Конечно, в таких критических местах, как вход на сайт, стоило бы делать предварительную обработку данных. Однако, я решил, что операция по удалению лишних пробелов, в общем-то, довольно распространенная и можно ее сделать глобальной. В этом нам помогут чудесные middleware.

Наше расширение будет обрабатывать любые входящие данные (за исключением указанных). Оно будет обрезать лишние пробелы и символы табуляции у строк, а также преобразовывать пустые строки в null значение.

Я не буду проходить весь процесс создания middleware, для этого есть справка. Если честно, вы можете вообще не заморачиваться, добавить себе этот функционал и не разбираться. Это расширение (и не только) находится в моем репозитории вот здесь.

Имея в своем вооружение подобный middleware вы можете установить его глобально, и тогда оно будет работать при каждом запросе, либо дать ему имя и использовать там, где это необходимо. Основная проблема здесь в том, чтобы все остальные функции продолжали работать в штатном режиме, чтобы Input::all() и Input::only() возвращали уже обработанные данные. Как это сделать? Да очень просто:

$request->merge($data);

Таким образом мы можем добавить новые данные входящие, либо заменить старые. Осталось их только обработать:

$data = $request->all();

array_walk_recursive($data, function (&$value) {
    if (is_string($value)) {
        $value = trim($value);
    }
});

$request->merge($data);

Здесь, однако, могут возникнуть проблемы. Некоторые значения (например, пароли) не нужно обрабатывать, поэтому необходимо внести небольшую модификацию:

$except = [ 'password', 'password_confirmation' ];

$data = $request->except($except);

Осталось только оформить в конечный middleware. Полный исходный код вы можете найти здесь вместе с некоторыми улучшениями:

  • middleware принимает список ключей, которые не должны обрабатываться, например:

    $this->middleware('process:pwd,pwd_confirmation');

  • преобразует пустые строки в null значения (приятнее в БД хранить NULL, а не пустые строки).

Этот пример можно дальше расширять и добавлять дополнительные обработчики. Особенностью такого подхода является то, что обработка происходит ДО любой проверки данных, что иногда бывает необходимым, и при этом нет необходимости вмешиваться в другие системы сайта.

Как вы считаете, полезен ли этот материал? Да Нет

Написать комментарий

Разметка: ? ?

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