TrimStrings
Middleware TrimStrings входит в стандартную поставку Laravel и применяется ко всем входящим запросам. Его основная задача - автоматически обрезать пробельные символы (пробелы, табуляцию, переводы строк) в начале и конце строковых полей запроса. Это помогает предотвратить ошибки, связанные с случайными пробелами в данных пользователя, и обеспечивает более чистые данные для дальнейшей обработки. По умолчанию middleware обрабатывает все строковые параметры запроса, включая поля формы, JSON-данные и параметры строки запроса.
Синтаксис
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
class TrimStrings extends Middleware
{
protected $except = [
'password',
'password_confirmation',
];
}
?>
Параметр $except определяет массив полей, которые не будут обработаны middleware. Это полезно для полей, где пробелы имеют значение, например, для паролей или текстовых данных, где пробелы являются значимыми символами. По умолчанию из обработки исключены поля 'password' и 'password_confirmation'.
Пример
Рассмотрим стандартное поведение TrimStrings при отправке формы регистрации:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class UserController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string',
'email' => 'required|email',
'password' => 'required|min:8',
]);
$user = User::create($validated);
$res = $user->only(['name', 'email']);
echo json_encode($res);
}
}
?>
Отправим POST-запрос с пробелами в данных:
{
"name": " John Doe ",
"email": " john@example.com ",
"password": "secret123"
}
Результат выполнения кода после обработки TrimStrings:
{"name":"John Doe","email":"john@example.com"}
Как видим, пробелы были удалены из полей 'name' и 'email', но поле 'password' осталось без изменений, так как оно исключено из обработки.
Пример
Добавим собственное поле в исключения для обработки параметра с пробелами:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
class TrimStrings extends Middleware
{
protected $except = [
'password',
'password_confirmation',
'code',
];
}
?>
Теперь поле 'code' также будет пропущено через обработку. Это может быть полезно, когда в поле 'code' могут содержаться значимые пробелы, например, в коде активации или идентификаторе.
Пример
Выведем все обработанные данные запроса после применения TrimStrings:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index(Request $request)
{
$res = $request->all();
foreach ($res as $key => $value) {
echo $key . ': "' . $value . '"' . PHP_EOL;
}
}
}
?>
Отправим запрос с различными типами пробелов:
{
"text": " Hello World ",
"message": "\tTest\t",
"code": " 12345 ",
"password": " mypassword "
}
Результат выполнения кода:
text: "Hello World"
message: "Test"
code: " 12345 "
password: " mypassword "
Обратите внимание, что поля 'text' и 'message' были очищены от пробелов, поле 'code' пропущено через обработку (в нем остались пробелы), а поле 'password' также осталось без изменений, так как оно исключено по умолчанию.
Смотрите также
-
мидлварь
ValidateCsrfToken,
которая проверяет CSRF-токен запроса -
мидлварь
EncryptCookies,
которая шифрует и дешифрует куки -
мидлварь
SubstituteBindings,
которая заменяет маршрутные привязки моделей -
мидлварь
signed,
которая проверяет подпись URL-адреса