Не знаю как у вас, но у меня возникала очень неприятная ситуация, когда пользователь случайно вводил лишний пробел в конце или вначале, а потом не мог получить доступ к своему профилю. Конечно, в таких критических местах, как вход на сайт, стоило бы делать предварительную обработку данных. Однако, я решил, что операция по удалению лишних пробелов, в общем-то, довольно распространенная и можно ее сделать глобальной. В этом нам помогут чудесные 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, а не пустые строки).
Этот пример можно дальше расширять и добавлять дополнительные обработчики. Особенностью такого подхода является то, что обработка происходит ДО любой проверки данных, что иногда бывает необходимым, и при этом нет необходимости вмешиваться в другие системы сайта.