HTTP-запити
Вступ
Клас Illuminate\Http\Request у Laravel дає об'єктно-орієнтований спосіб працювати з поточним HTTP-запитом, який обробляє ваш застосунок, а також отримувати вхідні дані, cookie й файли, надіслані разом із запитом.
Робота із запитом
Доступ до запиту
Щоб отримати екземпляр поточного HTTP-запиту через впровадження залежностей, вкажіть тип Illuminate\Http\Request у замиканні маршруту чи методі контролера. Сервіс-контейнер Laravel автоматично впровадить екземпляр вхідного запиту:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Store a new user.
*/
public function store(Request $request): RedirectResponse
{
$name = $request->input('name');
// Store the user...
return redirect('/users');
}
}
Як згадувалося, ви також можете вказати тип Illuminate\Http\Request у замиканні маршруту. Сервіс-контейнер автоматично впровадить вхідний запит у замикання під час його виконання:
use Illuminate\Http\Request;
Route::get('/', function (Request $request) {
// ...
});
Впровадження залежностей і параметри маршруту
Якщо ваш метод контролера також очікує вхідні дані з параметра маршруту, перелічуйте параметри маршруту після інших залежностей. Наприклад, якщо ваш маршрут визначено так:
use App\Http\Controllers\UserController;
Route::put('/user/{id}', [UserController::class, 'update']);
Ви все одно можете вказати тип Illuminate\Http\Request і звертатися до параметра маршруту id, визначивши метод контролера так:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Update the specified user.
*/
public function update(Request $request, string $id): RedirectResponse
{
// Update the user...
return redirect('/users');
}
}
Шлях, хост і метод запиту
Екземпляр Illuminate\Http\Request надає різноманітні методи для дослідження вхідного HTTP-запиту й успадковує клас Symfony\Component\HttpFoundation\Request. Нижче ми розглянемо кілька найважливіших методів.
Отримання шляху запиту
Метод path повертає інформацію про шлях запиту. Тож якщо вхідний запит спрямовано на http://example.com/foo/bar, метод path поверне foo/bar:
$uri = $request->path();
Перевірка шляху чи маршруту запиту
Метод is дозволяє перевірити, чи збігається шлях вхідного запиту із заданим шаблоном. У цьому методі можна використовувати символ * як підстановочний:
if ($request->is('admin/*')) {
// ...
}
Методом routeIs ви можете визначити, чи збігся вхідний запит із іменованим маршрутом:
if ($request->routeIs('admin.*')) {
// ...
}
Отримання URL запиту
Щоб отримати повний URL вхідного запиту, скористайтеся методами url чи fullUrl. Метод url поверне URL без рядка запиту, а fullUrl - разом із ним:
$url = $request->url();
$urlWithQueryString = $request->fullUrl();
Якщо ви хочете додати дані рядка запиту до поточного URL, викличте метод fullUrlWithQuery. Він об'єднає переданий масив змінних рядка запиту з поточним рядком запиту:
$request->fullUrlWithQuery(['type' => 'phone']);
Якщо ви хочете отримати поточний URL без певного параметра рядка запиту, скористайтеся методом fullUrlWithoutQuery:
$request->fullUrlWithoutQuery(['type']);
Отримання хоста запиту
Отримати «хост» вхідного запиту можна методами host, httpHost і schemeAndHttpHost:
// http://localhost:8000
$request->host(); // localhost
$request->httpHost(); // localhost:8000
$request->schemeAndHttpHost(); // http://localhost:8000
Отримання методу запиту
Метод method поверне HTTP-метод запиту. Ви можете скористатися методом isMethod, щоб перевірити, чи збігається HTTP-метод із заданим рядком:
$method = $request->method();
if ($request->isMethod('post')) {
// ...
}
Заголовки запиту
Отримати заголовок запиту з екземпляра Illuminate\Http\Request можна методом header. Якщо заголовка в запиті немає, буде повернуто null. Утім, метод header приймає необов'язковий другий аргумент, який буде повернуто за відсутності заголовка:
$value = $request->header('X-Header-Name');
$value = $request->header('X-Header-Name', 'default');
Метод hasHeader дозволяє визначити, чи містить запит певний заголовок:
if ($request->hasHeader('X-Header-Name')) {
// ...
}
Для зручності метод bearerToken дозволяє отримати bearer-токен із заголовка Authorization. Якщо такого заголовка немає, буде повернуто порожній рядок:
$token = $request->bearerToken();
IP-адреса запиту
Метод ip дозволяє отримати IP-адресу клієнта, який зробив запит до вашого застосунку:
$ipAddress = $request->ip();
Якщо ви хочете отримати масив IP-адрес, зокрема всі адреси клієнта, переслані проксі-серверами, скористайтеся методом ips. «Початкова» IP-адреса клієнта буде в кінці масиву:
$ipAddresses = $request->ips();
Загалом IP-адреси слід вважати недовіреними даними, які контролює користувач, і використовувати лише в інформаційних цілях.
Узгодження вмісту
Laravel надає кілька методів для дослідження типів вмісту, які запитує вхідний запит, через заголовок Accept. Спершу метод getAcceptableContentTypes поверне масив усіх типів вмісту, прийнятних для запиту:
$contentTypes = $request->getAcceptableContentTypes();
Метод accepts приймає масив типів вмісту й повертає true, якщо хоч один із них прийнятний для запиту. Інакше буде повернуто false:
if ($request->accepts(['text/html', 'application/json'])) {
// ...
}
Метод prefers дозволяє визначити, який тип вмісту з переданого масиву є найбажанішим для запиту. Якщо жоден із наданих типів не прийнятний, буде повернуто null:
$preferred = $request->prefers(['text/html', 'application/json']);
Оскільки багато застосунків віддають лише HTML чи JSON, метод expectsJson дозволяє швидко визначити, чи очікує вхідний запит JSON-відповідь:
if ($request->expectsJson()) {
// ...
}
Якщо вам потрібно визначити, чи запит саме віддає перевагу Markdown або чи прийме його серед інших типів вмісту - наприклад, коли ви обслуговуєте AI-агентів чи інших клієнтів, що споживають Markdown-відповіді, - скористайтеся методами wantsMarkdown і acceptsMarkdown:
if ($request->wantsMarkdown()) {
// The client's most preferred content type is text/markdown...
}
if ($request->acceptsMarkdown()) {
// The client accepts Markdown responses...
}
Запити PSR-7
Стандарт PSR-7 визначає інтерфейси для HTTP-повідомлень, зокрема запитів і відповідей. Якщо ви хочете отримати екземпляр запиту PSR-7 замість запиту Laravel, спершу потрібно встановити кілька бібліотек. Laravel використовує компонент Symfony HTTP Message Bridge для перетворення типових запитів і відповідей Laravel на сумісні з PSR-7 реалізації:
composer require symfony/psr-http-message-bridge
composer require nyholm/psr7
Встановивши ці бібліотеки, ви можете отримати запит PSR-7, вказавши тип інтерфейсу запиту в замиканні маршруту чи методі контролера:
use Psr\Http\Message\ServerRequestInterface;
Route::get('/', function (ServerRequestInterface $request) {
// ...
});
Якщо ви повернете з маршруту чи контролера екземпляр відповіді PSR-7, його буде автоматично перетворено назад на екземпляр відповіді Laravel і показано фреймворком.
Вхідні дані
Отримання вхідних даних
Отримання всіх вхідних даних
Ви можете отримати всі вхідні дані запиту як array методом all. Цей метод працює незалежно від того, надійшов запит із HTML-форми чи є XHR-запитом:
$input = $request->all();
Методом collect ви можете отримати всі вхідні дані запиту як колекцію:
$input = $request->collect();
Метод collect також дозволяє отримати як колекцію лише частину вхідних даних:
$request->collect('users')->each(function (string $user) {
// ...
});
Отримання окремого значення
За допомогою кількох простих методів ви можете звертатися до всіх вхідних даних користувача з екземпляра Illuminate\Http\Request, не переймаючись тим, який HTTP-метод було використано. Незалежно від методу, отримати дані користувача можна методом input:
$name = $request->input('name');
Ви можете передати значення за замовчуванням другим аргументом методу input. Воно повернеться, якщо запитаного значення в запиті немає:
$name = $request->input('name', 'Sally');
Працюючи з формами, що містять масиви, використовуйте «крапкову» нотацію для доступу до них:
$name = $request->input('products.0.name');
$names = $request->input('products.*.name');
Ви можете викликати метод input без аргументів, щоб отримати всі вхідні значення як асоціативний масив:
$input = $request->input();
Отримання даних із рядка запиту
Тоді як метод input отримує значення з усього тіла запиту (включно з рядком запиту), метод query бере значення лише з рядка запиту:
$name = $request->query('name');
Якщо запитаного значення в рядку запиту немає, буде повернуто другий аргумент цього методу:
$name = $request->query('name', 'Helen');
Ви можете викликати метод query без аргументів, щоб отримати всі значення рядка запиту як асоціативний масив:
$query = $request->query();
Отримання значень із JSON
Надсилаючи JSON-запити до вашого застосунку, ви можете звертатися до JSON-даних методом input, якщо заголовок Content-Type запиту правильно встановлено в application/json. Ви навіть можете скористатися «крапковим» синтаксисом, щоб отримати значення, вкладені в JSON-масиви чи об'єкти:
$name = $request->input('user.name');
Отримання значень як Stringable
Замість отримувати вхідні дані запиту як примітивний string, ви можете скористатися методом string, щоб отримати їх як екземпляр Illuminate\Support\Stringable:
$name = $request->string('name')->trim();
Отримання цілочисельних значень
Щоб отримати вхідні значення як цілі числа, скористайтеся методом integer. Він спробує привести значення до цілого. Якщо значення відсутнє або приведення не вдалося, буде повернуто вказане вами значення за замовчуванням. Це особливо корисно для пагінації чи інших числових даних:
$perPage = $request->integer('per_page');
Отримання булевих значень
Працюючи з HTML-елементами на кшталт чекбоксів, ваш застосунок може отримувати «істинні» значення, які насправді є рядками - наприклад, «true» чи «on». Для зручності скористайтеся методом boolean, щоб отримати ці значення як булеві. Метод boolean повертає true для 1, "1", true, "true", "on" та "yes". Усі інші значення дадуть false:
$archived = $request->boolean('archived');
Отримання масивів
Вхідні значення, що містять масиви, можна отримати методом array. Він завжди приведе значення до масиву. Якщо запит не містить значення з указаним іменем, буде повернуто порожній масив:
$versions = $request->array('versions');
Отримання дат
Для зручності вхідні значення з датами чи часом можна отримати як екземпляри Carbon методом date. Якщо запит не містить значення з указаним іменем, буде повернуто null:
$birthday = $request->date('birthday');
Другий і третій аргументи методу date дозволяють указати формат дати та часовий пояс відповідно:
$elapsed = $request->date('elapsed', '!H:i', 'Europe/Madrid');
Якщо значення присутнє, але має недійсний формат, буде викинуто InvalidArgumentException; тому рекомендуємо валідувати дані перед викликом методу date.
Отримання інтервалів
Вхідні значення, що містять тривалості, можна отримати як екземпляри CarbonInterval методом interval. Якщо запит не містить значення з указаним іменем, буде повернуто null:
$duration = $request->interval('duration');
Якщо значення числове, ви можете передати одиницю виміру другим аргументом. Це може бути рядок на кшталт second, minute чи day, або екземпляр enum Carbon\Unit:
use Carbon\Unit;
$timeout = $request->interval('timeout', 'second');
$delay = $request->interval('delay', Unit::Minute);
Якщо значення присутнє, але має недійсний формат, буде викинуто InvalidArgumentException; тому рекомендуємо валідувати дані перед викликом методу interval.
Отримання значень enum
Вхідні значення, що відповідають enum PHP, також можна отримати із запиту. Якщо запит не містить значення з указаним іменем або enum не має відповідного значення, буде повернуто null. Метод enum приймає ім'я вхідного значення та клас enum першим і другим аргументами:
use App\Enums\Status;
$status = $request->enum('status', Status::class);
Ви також можете передати значення за замовчуванням, яке повернеться, якщо значення відсутнє чи недійсне:
$status = $request->enum('status', Status::class, Status::Pending);
Якщо вхідне значення є масивом значень, що відповідають enum PHP, скористайтеся методом enums, щоб отримати масив значень як екземпляри enum:
use App\Enums\Product;
$products = $request->enums('products', Product::class);
Отримання даних через динамічні властивості
Ви також можете звертатися до вхідних даних користувача через динамічні властивості екземпляра Illuminate\Http\Request. Наприклад, якщо одна з форм вашого застосунку містить поле name, ви можете звернутися до його значення так:
$name = $request->name;
Використовуючи динамічні властивості, Laravel спершу шукатиме значення параметра в тілі запиту. Якщо його там немає, Laravel шукатиме поле серед параметрів відповідного маршруту.
Отримання частини вхідних даних
Якщо вам потрібно отримати підмножину вхідних даних, скористайтеся методами only та except. Обидва приймають один array або динамічний список аргументів:
$input = $request->only(['username', 'password']);
$input = $request->only('username', 'password');
$input = $request->except(['credit_card']);
$input = $request->except('credit_card');
Метод
onlyповертає всі запитані пари «ключ - значення»; однак він не поверне пар, яких немає в запиті.
Наявність вхідних даних
Метод has дозволяє визначити, чи присутнє значення в запиті. Він повертає true, якщо значення присутнє:
if ($request->has('name')) {
// ...
}
Якщо передати масив, метод has визначить, чи присутні всі вказані значення:
if ($request->has(['name', 'email'])) {
// ...
}
Метод hasAny повертає true, якщо присутнє хоч одне з указаних значень:
if ($request->hasAny(['name', 'email'])) {
// ...
}
Метод whenHas виконає передане замикання, якщо значення присутнє в запиті:
$request->whenHas('name', function (string $input) {
// ...
});
Методу whenHas можна передати друге замикання, яке виконається, якщо вказаного значення в запиті немає:
$request->whenHas('name', function (string $input) {
// The "name" value is present...
}, function () {
// The "name" value is not present...
});
Якщо ви хочете визначити, що значення присутнє в запиті й не є порожнім рядком, скористайтеся методом filled:
if ($request->filled('name')) {
// ...
}
Якщо ви хочете визначити, що значення відсутнє в запиті або є порожнім рядком, скористайтеся методом isNotFilled:
if ($request->isNotFilled('name')) {
// ...
}
Якщо передати масив, метод isNotFilled визначить, чи всі вказані значення відсутні або порожні:
if ($request->isNotFilled(['name', 'email'])) {
// ...
}
Метод anyFilled повертає true, якщо хоч одне з указаних значень не є порожнім рядком:
if ($request->anyFilled(['name', 'email'])) {
// ...
}
Метод whenFilled виконає передане замикання, якщо значення присутнє в запиті й не є порожнім рядком:
$request->whenFilled('name', function (string $input) {
// ...
});
Методу whenFilled можна передати друге замикання, яке виконається, якщо вказане значення не «заповнене»:
$request->whenFilled('name', function (string $input) {
// The "name" value is filled...
}, function () {
// The "name" value is not filled...
});
Щоб визначити, що певного ключа в запиті немає, скористайтеся методами missing і whenMissing:
if ($request->missing('name')) {
// ...
}
$request->whenMissing('name', function () {
// The "name" value is missing...
}, function () {
// The "name" value is present...
});
Додавання вхідних даних
Іноді вам може знадобитися вручну додати додаткові дані до наявних вхідних даних запиту. Це робиться методом merge. Якщо переданий ключ уже існує в запиті, його буде перезаписано даними, переданими методу merge:
$request->merge(['votes' => 0]);
Метод mergeIfMissing дозволяє додати дані до запиту, якщо відповідних ключів у ньому ще немає:
$request->mergeIfMissing(['votes' => 0]);
Попередні вхідні дані
Laravel дозволяє зберігати вхідні дані одного запиту для наступного. Ця можливість особливо корисна для повторного заповнення форм після виявлення помилок валідації. Утім, якщо ви користуєтеся вбудованими можливостями валідації Laravel, вам, імовірно, не доведеться викликати ці методи вручну, адже частина вбудованих засобів валідації робить це автоматично.
Запис вхідних даних до сесії
Метод flash класу Illuminate\Http\Request запише поточні вхідні дані до сесії, щоб вони були доступні під час наступного запиту користувача:
$request->flash();
Ви також можете скористатися методами flashOnly та flashExcept, щоб записати до сесії лише частину даних запиту. Ці методи корисні, щоб не зберігати в сесії конфіденційну інформацію на кшталт паролів:
$request->flashOnly(['username', 'email']);
$request->flashExcept('password');
Запис даних із подальшим перенаправленням
Оскільки часто потрібно записати дані до сесії й одразу перенаправити на попередню сторінку, ви можете легко приєднати запис даних до перенаправлення методом withInput:
return redirect('/form')->withInput();
return redirect()->route('user.create')->withInput();
return redirect('/form')->withInput(
$request->except('password')
);
Отримання попередніх даних
Щоб отримати збережені дані попереднього запиту, викличте метод old на екземплярі Illuminate\Http\Request. Метод old візьме раніше збережені дані із сесії:
$username = $request->old('username');
Laravel також надає глобальний хелпер old. Якщо ви показуєте попередні дані в шаблоні Blade, зручніше скористатися хелпером old, щоб заново заповнити форму. Якщо попередніх даних для вказаного поля немає, буде повернуто null:
<input type="text" name="username" value="{{ old('username') }}">
Cookie
Отримання cookie із запитів
Усі cookie, створені фреймворком Laravel, зашифровані й підписані кодом автентифікації, тобто вважатимуться недійсними, якщо клієнт їх змінив. Щоб отримати значення cookie із запиту, скористайтеся методом cookie на екземплярі Illuminate\Http\Request:
$value = $request->cookie('name');
Обрізання та нормалізація вхідних даних
За замовчуванням Laravel додає middleware Illuminate\Foundation\Http\Middleware\TrimStrings та Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull до глобального стека вашого застосунку. Ці middleware автоматично обрізають усі вхідні рядкові поля запиту, а також перетворюють порожні рядки на null. Завдяки цьому вам не потрібно перейматися нормалізацією в маршрутах і контролерах.
Вимкнення нормалізації вхідних даних
Якщо ви хочете вимкнути цю поведінку для всіх запитів, вилучіть ці два middleware зі стека вашого застосунку, викликавши метод $middleware->remove у файлі bootstrap/app.php:
use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
use Illuminate\Foundation\Http\Middleware\TrimStrings;
->withMiddleware(function (Middleware $middleware): void {
$middleware->remove([
ConvertEmptyStringsToNull::class,
TrimStrings::class,
]);
})
Якщо ви хочете вимкнути обрізання рядків і перетворення порожніх рядків лише для частини запитів, скористайтеся методами trimStrings і convertEmptyStringsToNull у файлі bootstrap/app.php. Обидва приймають масив замикань, які мають повертати true чи false, вказуючи, чи слід пропустити нормалізацію:
->withMiddleware(function (Middleware $middleware): void {
$middleware->convertEmptyStringsToNull(except: [
fn (Request $request) => $request->is('admin/*'),
]);
$middleware->trimStrings(except: [
fn (Request $request) => $request->is('admin/*'),
]);
})
Файли
Отримання завантажених файлів
Отримати завантажені файли з екземпляра Illuminate\Http\Request можна методом file або через динамічні властивості. Метод file повертає екземпляр класу Illuminate\Http\UploadedFile, який успадковує PHP-клас SplFileInfo і надає різноманітні методи для роботи з файлом:
$file = $request->file('photo');
$file = $request->photo;
Визначити, чи присутній файл у запиті, можна методом hasFile:
if ($request->hasFile('photo')) {
// ...
}
Якщо завантажений файл є зображенням, яке потрібно обробити перед збереженням, скористайтеся методом image, щоб отримати екземпляр Illuminate\Image\Image, або null, якщо файла немає:
$image = $request->image('photo');
Докладніше про обробку зображень читайте в повній документації з обробки зображень.
Перевірка успішності завантаження
Окрім перевірки наявності файлу, ви можете переконатися, що під час завантаження не було проблем, методом isValid:
if ($request->file('photo')->isValid()) {
// ...
}
Шляхи та розширення файлів
Клас UploadedFile також містить методи для доступу до повного шляху файлу та його розширення. Метод extension спробує вгадати розширення на основі вмісту файлу. Це розширення може відрізнятися від того, що надав клієнт:
$path = $request->photo->path();
$extension = $request->photo->extension();
Інші методи файлів
Екземпляри UploadedFile мають чимало інших методів. Докладніше про них дивіться в документації API цього класу.
Збереження завантажених файлів
Щоб зберегти завантажений файл, ви зазвичай скористаєтеся однією з налаштованих файлових систем. Клас UploadedFile має метод store, який перемістить завантажений файл на один із ваших дисків - це може бути розташування в локальній файловій системі чи хмарне сховище на кшталт Amazon S3.
Метод store приймає шлях, за яким слід зберегти файл, відносно кореневого каталогу файлової системи. Цей шлях не має містити імені файлу, адже як ім'я автоматично буде згенеровано унікальний ідентифікатор.
Метод store також приймає необов'язковий другий аргумент - ім'я диска, на якому слід зберегти файл. Метод поверне шлях до файлу відносно кореня диска:
$path = $request->photo->store('images');
$path = $request->photo->store('images', 's3');
Якщо ви не хочете, щоб ім'я файлу генерувалося автоматично, скористайтеся методом storeAs, який приймає шлях, ім'я файлу та ім'я диска:
$path = $request->photo->storeAs('images', 'filename.jpg');
$path = $request->photo->storeAs('images', 'filename.jpg', 's3');
Докладніше про зберігання файлів у Laravel читайте в повній документації з файлового сховища.
Налаштування довірених проксі
Коли ваші застосунки працюють за балансувальником навантаження, що завершує TLS/SSL-з'єднання, ви можете помітити, що застосунок іноді не генерує HTTPS-посилання через хелпер url. Зазвичай це тому, що трафік надходить від балансувальника на порт 80, і застосунок не знає, що має генерувати захищені посилання.
Щоб це виправити, увімкніть middleware Illuminate\Http\Middleware\TrustProxies, який входить до вашого застосунку Laravel і дозволяє швидко вказати балансувальники чи проксі, яким має довіряти застосунок. Довірені проксі задаються методом trustProxies у файлі bootstrap/app.php:
->withMiddleware(function (Middleware $middleware): void {
$middleware->trustProxies(at: [
'192.168.1.1',
'10.0.0.0/8',
]);
})
Окрім налаштування довірених проксі, ви можете також налаштувати заголовки проксі, яким слід довіряти:
->withMiddleware(function (Middleware $middleware): void {
$middleware->trustProxies(headers: Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB
);
})
Якщо ви використовуєте AWS Elastic Load Balancing, значенням
headersмає бутиRequest::HEADER_X_FORWARDED_AWS_ELB. Якщо ваш балансувальник використовує стандартний заголовокForwardedіз RFC 7239, значеннямheadersмає бутиRequest::HEADER_FORWARDED. Докладніше про константи, які можна використовувати у значенніheaders, дивіться в документації Symfony щодо довіри проксі.
Довіра всім проксі
Якщо ви користуєтеся Amazon AWS чи іншим «хмарним» провайдером балансувальників, ви можете не знати IP-адрес своїх балансувальників. У такому разі скористайтеся *, щоб довіряти всім проксі:
->withMiddleware(function (Middleware $middleware): void {
$middleware->trustProxies(at: '*');
})
Налаштування довірених хостів
За замовчуванням Laravel відповідатиме на всі отримані запити незалежно від вмісту заголовка Host. Крім того, значення заголовка Host використовуватиметься під час генерації абсолютних URL до вашого застосунку.
Зазвичай варто налаштувати ваш веб-сервер - Nginx чи Apache - так, щоб він надсилав до застосунку лише запити, що відповідають певному імені хоста. Утім, якщо ви не можете налаштувати веб-сервер напряму й хочете вказати Laravel відповідати лише певним іменам хостів, увімкніть для свого застосунку middleware Illuminate\Http\Middleware\TrustHosts.
Щоб увімкнути middleware TrustHosts, викличте метод trustHosts у файлі bootstrap/app.php. За допомогою аргументу at ви можете вказати імена хостів, на які має відповідати ваш застосунок. Рядок імені хоста трактується як регулярний вираз. Вхідні запити з іншими заголовками Host буде відхилено:
->withMiddleware(function (Middleware $middleware): void {
$middleware->trustHosts(at: ['^laravel\.test$']);
})
За замовчуванням запити з піддоменів URL застосунку теж автоматично вважаються довіреними. Якщо ви хочете вимкнути цю поведінку, скористайтеся аргументом subdomains:
->withMiddleware(function (Middleware $middleware): void {
$middleware->trustHosts(at: ['^laravel\.test$'], subdomains: false);
})
Якщо для визначення довірених хостів вам потрібен доступ до конфігураційних файлів чи бази даних застосунку, передайте аргументу at замикання:
->withMiddleware(function (Middleware $middleware): void {
$middleware->trustHosts(at: fn () => config('app.trusted_hosts'));
})