HTTP Запити
- Вступ
- Взаємодія з запитом
- Вхідні дані
- Файли
- Налаштування Довірених Проксі
- Налаштування Довірених Хостів
Вступ
Laravel's Illuminate\Http\Request клас надає об'єктно-орієнтований спосіб взаємодії з поточним HTTP-запитом, який обробляється вашим застосунком, а також отримання введених даних, cookies та файлів, які були надіслані з запитом.
Взаємодія з запитом
Доступ до запиту
Щоб отримати екземпляр поточного HTTP-запиту через впровадження залежностей, ви повинні вказати клас Illuminate\Http\Request у вашому замиканні маршруту або методі контролера. Вхідний екземпляр запиту буде автоматично впроваджено Сервіс-контейнером Laravel сервіс-контейнер:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Зберегти нового користувача.
*/
public function store(Request $request): RedirectResponse
{
$name = $request->input('name');
// Зберегти користувача...
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
{
/**
* Оновити вказаного користувача.
*/
public function update(Request $request, string $id): RedirectResponse
{
// Оновити користувача...
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" вхідного запиту за допомогою методів host, httpHost та schemeAndHttpHost:
$request->host();
$request->httpHost();
$request->schemeAndHttpHost();
Отримання методу запиту
Метод 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 може бути використаний для отримання токена носія з заголовка Authorization. Якщо такий заголовок відсутній, буде повернуто порожній рядок:
$token = $request->bearerToken();
IP-адреса запиту
Метод ip може бути використаний для отримання IP-адреси клієнта, який зробив запит до вашого застосунку:
$ipAddress = $request->ip();
Якщо ви хочете отримати масив 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()) {
// ...
}
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 дієслово було використано для запиту. Незалежно від 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. Ви навіть можете використовувати "dot" синтаксис для отримання значень, які вкладені в 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.
Отримання значень введення Enum
Вхідні значення, що відповідають PHP перерахуванням, також можуть бути отримані з запиту. Якщо запит не містить вхідного значення з даним ім'ям або перерахування не має значення, що відповідає вхідному значенню, буде повернуто null. Метод enum приймає ім'я вхідного значення та клас перерахування як свій перший та другий аргументи:
use App\Enums\Status;
$status = $request->enum('status', Status::class);
Ви також можете надати значення за замовчуванням, яке буде повернено, якщо значення відсутнє або недійсне:
$status = $request->enum('status', Status::class, Status::Pending);
Якщо вхідне значення є масивом значень, що відповідають PHP enum, ви можете використовувати метод 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, щоб визначити, чи присутнє значення в запиті. Метод 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) {
// Значення "name" присутнє...
}, function () {
// Значення "name" відсутнє...
});
Якщо ви хочете визначити, чи присутнє значення в запиті і не є порожнім рядком, ви можете використовувати метод 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) {
// Значення "name" заповнено...
}, function () {
// Значення "name" не заповнено...
});
Щоб визначити, чи відсутній певний ключ у запиті, ви можете використовувати методи missing та whenMissing:
if ($request->missing('name')) {
// ...
}
$request->whenMissing('name', function () {
// Значення "name" відсутнє...
}, function () {
// Значення "name" присутнє...
});
Об'єднання Додаткового Вводу
Іноді вам може знадобитися вручну об'єднати додаткові дані введення з існуючими даними введення запиту. Щоб досягти цього, ви можете використовувати метод merge. Якщо заданий ключ введення вже існує в запиті, він буде перезаписаний даними, наданими методу merge:
$request->merge(['votes' => 0]);
Метод mergeIfMissing може бути використаний для об'єднання введених даних у запит, якщо відповідні ключі ще не існують у вхідних даних запиту:
$request->mergeIfMissing(['votes' => 0]);
Старий ввід
Laravel дозволяє зберігати введені дані з одного запиту під час наступного запиту. Ця функція особливо корисна для повторного заповнення форм після виявлення помилок валідації. Однак, якщо ви використовуєте функції валідації, що входять до складу 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') }}">
Cookies
Отримання Кукі з Запитів
Усі cookies, створені фреймворком Laravel, зашифровані та підписані кодом автентифікації, що означає, що вони будуть вважатися недійсними, якщо були змінені клієнтом. Щоб отримати значення cookie з запиту, використовуйте метод cookie на екземплярі Illuminate\Http\Request:
$value = $request->cookie('name');
Обрізка та нормалізація введення
За замовчуванням, Laravel включає Illuminate\Foundation\Http\Middleware\TrimStrings та Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull middleware у глобальний стек middleware вашого застосунку. Ці middleware автоматично обрізатимуть всі вхідні текстові поля у запиті, а також перетворюватимуть будь-які порожні текстові поля на null. Це дозволяє вам не турбуватися про ці питання нормалізації у ваших маршрутах та контролерах.
Вимкнення нормалізації введення
Якщо ви хочете вимкнути цю поведінку для всіх запитів, ви можете видалити два middleware з стеку middleware вашого застосунку, викликавши метод $middleware->remove у файлі bootstrap/app.php вашого застосунку:
use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
use Illuminate\Foundation\Http\Middleware\TrimStrings;
->withMiddleware(function (Middleware $middleware) {
$middleware->remove([
ConvertEmptyStringsToNull::class,
TrimStrings::class,
]);
})
Якщо ви хочете вимкнути обрізання рядків і перетворення порожніх рядків для підмножини запитів до вашого застосунку, ви можете використовувати методи middleware trimStrings і convertEmptyStringsToNull у файлі bootstrap/app.php вашого застосунку. Обидва методи приймають масив замикань, які повинні повертати true або false, щоб вказати, чи слід пропустити нормалізацію вводу:
->withMiddleware(function (Middleware $middleware) {
$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')) {
// ...
}
Перевірка успішних завантажень
Крім перевірки наявності файлу, ви можете переконатися, що не виникло проблем під час завантаження файлу за допомогою методу 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-застосунок, що дозволяє швидко налаштувати балансувальники навантаження або проксі, яким має довіряти ваш застосунок. Ваші довірені проксі повинні бути вказані за допомогою методу middleware trustProxies у файлі bootstrap/app.php вашого застосунку:
->withMiddleware(function (Middleware $middleware) {
$middleware->trustProxies(at: [
'192.168.1.1',
'10.0.0.0/8',
]);
})
Крім налаштування довірених проксі, ви також можете налаштувати заголовки проксі, яким слід довіряти:
->withMiddleware(function (Middleware $middleware) {
$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) {
$middleware->trustProxies(at: '*');
})
Налаштування Довірених Хостів
За замовчуванням, Laravel буде відповідати на всі запити, які він отримує, незалежно від вмісту заголовка Host HTTP-запиту. Крім того, значення заголовка Host буде використовуватися при генерації абсолютних URL-адрес до вашого застосунку під час веб-запиту.
Зазвичай, ви повинні налаштувати ваш веб-сервер, такий як Nginx або Apache, щоб він надсилав запити до вашого застосунку, які відповідають заданому імені хоста. Однак, якщо у вас немає можливості безпосередньо налаштувати ваш веб-сервер і вам потрібно вказати Laravel відповідати лише на певні імена хостів, ви можете зробити це, увімкнувши middleware Illuminate\Http\Middleware\TrustHosts для вашого застосунку.
Щоб увімкнути TrustHosts middleware, ви повинні викликати метод middleware trustHosts у файлі bootstrap/app.php вашого застосунку. Використовуючи аргумент at цього методу, ви можете вказати імена хостів, на які ваш застосунок повинен відповідати. Вхідні запити з іншими заголовками Host будуть відхилені:
->withMiddleware(function (Middleware $middleware) {
$middleware->trustHosts(at: ['laravel.test']);
})
За замовчуванням, запити, що надходять з піддоменів URL-адреси застосунку, також автоматично вважаються довіреними. Якщо ви хочете вимкнути цю поведінку, ви можете використовувати аргумент subdomains:
->withMiddleware(function (Middleware $middleware) {
$middleware->trustHosts(at: ['laravel.test'], subdomains: false);
})
Якщо вам потрібно отримати доступ до конфігураційних файлів вашого застосунку або бази даних, щоб визначити довірені хости, ви можете надати замикання для аргументу at:
->withMiddleware(function (Middleware $middleware) {
$middleware->trustHosts(at: fn () => config('app.trusted_hosts'));
})
