Входные данные запроса

В этом разделе описано, как получать и обрабатывать данные, отправленные пользователем через формы, API-запросы или параметры URL.

По умолчанию Imhotep автоматически фильтрует входные данные через middleware:

  • Обрезает пробелы в начале и конце строк (App\Http\Middleware\RequestTrimStrings)
  • Преобразует пустые строки в null (App\Http\Middleware\RequestEmptyStringsToNull)

Эти поведения можно настроить в файле app/Http/Kernel.php.

Получение всех данных

Получите все данные из запроса в виде массива:

$data = $request->all();
$data = $request->input(); // То же самое
PHP

Получение конкретных полей

Основной метод input()

// Получить значение поля
$name = $request->input('name');

// Значение по умолчанию
$name = $request->input('name', 'Гость');
PHP

Получение параметров из URL

// URL: /user?id=123
$id = $request->query('id');

// Значение по умолчанию
$id = $request->query('id', -1);

// Все параметры URL
$params = $request->query();
PHP

Работа с массивами в формах

Используйте точечную нотацию для работы с массивами:

// Форма: <input name="products[0][name]">
$name = $request->input('products.0.name');

// Получить все имена продуктов
$names = $request->input('products.*.name');
PHP

Типизированные данные

Приводите данные к нужному типу автоматически:

Строки

$name = $request->string('name');
$name = $request->str('name'); // Сокращённый вариант

// С значением по умолчанию
$name = $request->string('name', 'Неизвестно');
PHP

Числа

// Целое число
$age = $request->integer('age');
$age = $request->int('age');

// Дробное число
$height = $request->float('height');
PHP

Логические значения

$archived = $request->boolean('archived');
$archived = $request->bool('archived');

// Значения, которые считаются true:
// 1, true, '1', 'true', 'on', 'yes'
// Все остальные значения вернут false
PHP

Проверка наличия данных

Простая проверка

// Одно поле
if ($request->has('name')) {
    // Поле 'name' присутствует
}

// Несколько полей (все должны присутствовать)
if ($request->has(['name', 'email'])) {
    // Оба поля присутствуют
}

// Хотя бы одно поле из списка
if ($request->hasAny(['name', 'email'])) {
    // name ИЛИ email присутствует
}
PHP

Проверка заполненности

// Поле присутствует и не пустое
if ($request->filled('name')) {
    // Поле 'name' заполнено
}

// Поле отсутствует
if ($request->missing('token')) {
    // Токен отсутствует
}

// Поле присутствует, но пустое
if ($request->notFilled('comment')) {
    // Комментарий пустой
}

// Хотя бы одно поле заполнено
if ($request->anyFilled(['phone', 'email'])) {
    // Телефон ИЛИ email заполнен
}
PHP

Условная обработка

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

Проверка наличия поля

Метод whenHas выполняет переданное замыкание только когда указанное поле присутствует в запросе (даже если его значение пустое). При необходимости можно обработать и ситуацию, когда поле отсутствует. Для этого передайте второе замыкание в качестве callback-а по умолчанию:

$request->whenHas('name', function ($value) {
    // Поле присутствует
}, function () {
    // Поле отсутствует - выполнится этот callback
});
PHP

Проверка заполненности поля

Метод whenFilled срабатывает только когда поле присутствует и его значение не пустое (не null, не пустая строка, не пустой массив). Также поддерживается callback для случая, когда поле пустое или отсутствует:

$request->whenFilled('name', function ($value) {
    // Поле заполнено
}, function () {
    // Поле пустое или отсутствует
});
PHP

Проверка отсутствия поля

Метод whenMissing выполняет замыкание когда указанное поле отсутствует в запросе. Для полноты картины можно добавить обработку противоположной ситуации - когда поле присутствует:

$request->whenMissing('token', function () {
    // Токен отсутствует
}, function () {
    // Токен присутствует
});
PHP

Фильтрация данных

Выбор конкретных полей

// Получить только нужные поля
$input = $request->only(['login', 'password']);
$input = $request->only('login', 'password'); // Альтернативный вариант
PHP

Исключение полей

// Получить всё, кроме указанных полей
$input = $request->except(['password', 'token']);
$input = $request->except('password', 'token');
PHP

Работа с JSON

Если запрос отправлен с заголовком Content-Type: application/json:

// JSON: {"user": {"name": "John"}}
$name = $request->input('user.name'); // 'John'

// Прямой доступ к JSON-данным
$jsonData = $request->json();
$name = $request->json('user.name');
PHP

Динамические свойства

Для быстрого доступа к данным можно использовать динамические свойства:

$name = $request->name;
$email = $request->email;

// Это работает так же, как $request->input('name')
PHP

Работа с файлами

Получите доступ к загруженным файлам:

// Получить один файл
$file = $request->file('photo');

// Проверить наличие файла
if ($request->hasFile('photo')) {
    $file = $request->file('photo');
}
PHP

Более подробную информацию вы найдёте в разделе работа с загруженными файлами.