Входные данные запроса
В этом разделе описано, как получать и обрабатывать данные, отправленные пользователем через формы, API-запросы или параметры URL.
По умолчанию Imhotep автоматически фильтрует входные данные через middleware:
- Обрезает пробелы в начале и конце строк (
App\Http\Middleware\RequestTrimStrings) - Преобразует пустые строки в null (
App\Http\Middleware\RequestEmptyStringsToNull)
Эти поведения можно настроить в файле app/Http/Kernel.php.
Получение всех данных
Получите все данные из запроса в виде массива:
$data = $request->all();
$data = $request->input(); // То же самое
Получение конкретных полей
Основной метод input()
// Получить значение поля
$name = $request->input('name');
// Значение по умолчанию
$name = $request->input('name', 'Гость');
Получение параметров из URL
// URL: /user?id=123
$id = $request->query('id');
// Значение по умолчанию
$id = $request->query('id', -1);
// Все параметры URL
$params = $request->query();
Работа с массивами в формах
Используйте точечную нотацию для работы с массивами:
// Форма: <input name="products[0][name]">
$name = $request->input('products.0.name');
// Получить все имена продуктов
$names = $request->input('products.*.name');
Типизированные данные
Приводите данные к нужному типу автоматически:
Строки
$name = $request->string('name');
$name = $request->str('name'); // Сокращённый вариант
// С значением по умолчанию
$name = $request->string('name', 'Неизвестно');
Числа
// Целое число
$age = $request->integer('age');
$age = $request->int('age');
// Дробное число
$height = $request->float('height');
Логические значения
$archived = $request->boolean('archived');
$archived = $request->bool('archived');
// Значения, которые считаются true:
// 1, true, '1', 'true', 'on', 'yes'
// Все остальные значения вернут false
Проверка наличия данных
Простая проверка
// Одно поле
if ($request->has('name')) {
// Поле 'name' присутствует
}
// Несколько полей (все должны присутствовать)
if ($request->has(['name', 'email'])) {
// Оба поля присутствуют
}
// Хотя бы одно поле из списка
if ($request->hasAny(['name', 'email'])) {
// name ИЛИ email присутствует
}
Проверка заполненности
// Поле присутствует и не пустое
if ($request->filled('name')) {
// Поле 'name' заполнено
}
// Поле отсутствует
if ($request->missing('token')) {
// Токен отсутствует
}
// Поле присутствует, но пустое
if ($request->notFilled('comment')) {
// Комментарий пустой
}
// Хотя бы одно поле заполнено
if ($request->anyFilled(['phone', 'email'])) {
// Телефон ИЛИ email заполнен
}
Условная обработка
Методы условной обработки позволяют выполнять различные действия в зависимости от наличия, отсутствия или заполненности полей запроса.
Проверка наличия поля
Метод whenHas выполняет переданное замыкание только когда указанное поле присутствует в запросе (даже если его значение пустое). При необходимости можно обработать и ситуацию, когда поле отсутствует. Для этого передайте второе замыкание в качестве callback-а по умолчанию:
$request->whenHas('name', function ($value) {
// Поле присутствует
}, function () {
// Поле отсутствует - выполнится этот callback
});
Проверка заполненности поля
Метод whenFilled срабатывает только когда поле присутствует и его значение не пустое (не null, не пустая строка, не пустой массив). Также поддерживается callback для случая, когда поле пустое или отсутствует:
$request->whenFilled('name', function ($value) {
// Поле заполнено
}, function () {
// Поле пустое или отсутствует
});
Проверка отсутствия поля
Метод whenMissing выполняет замыкание когда указанное поле отсутствует в запросе. Для полноты картины можно добавить обработку противоположной ситуации - когда поле присутствует:
$request->whenMissing('token', function () {
// Токен отсутствует
}, function () {
// Токен присутствует
});
Фильтрация данных
Выбор конкретных полей
// Получить только нужные поля
$input = $request->only(['login', 'password']);
$input = $request->only('login', 'password'); // Альтернативный вариант
Исключение полей
// Получить всё, кроме указанных полей
$input = $request->except(['password', 'token']);
$input = $request->except('password', 'token');
Работа с JSON
Если запрос отправлен с заголовком Content-Type: application/json:
// JSON: {"user": {"name": "John"}}
$name = $request->input('user.name'); // 'John'
// Прямой доступ к JSON-данным
$jsonData = $request->json();
$name = $request->json('user.name');
Динамические свойства
Для быстрого доступа к данным можно использовать динамические свойства:
$name = $request->name;
$email = $request->email;
// Это работает так же, как $request->input('name')
Работа с файлами
Получите доступ к загруженным файлам:
// Получить один файл
$file = $request->file('photo');
// Проверить наличие файла
if ($request->hasFile('photo')) {
$file = $request->file('photo');
}
Более подробную информацию вы найдёте в разделе работа с загруженными файлами.