コンテンツにスキップ

HTTP リクエスト

はじめに

Laravel の Illuminate\Http\Request クラスは、アプリケーションによって処理されている現在の 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']);

リクエストホストの取得

hosthttpHost、および schemeAndHttpHost メソッドを使用して、受信リクエストの「ホスト」を取得できます

$request->host();
$request->httpHost();
$request->schemeAndHttpHost();

リクエストメソッドの取得

method メソッドは、リクエストの HTTP 動詞を返します。isMethod メソッドを使用して、HTTP 動詞が特定の文字列と一致することを確認できます

$method = $request->method();
 
if ($request->isMethod('post')) {
// ...
}

リクエストヘッダー

header メソッドを使用して、Illuminate\Http\Request インスタンスからリクエストヘッダーを取得できます。リクエストにヘッダーが存在しない場合は、null が返されます。ただし、header メソッドは、リクエストにヘッダーが存在しない場合に返されるオプションの 2 番目の引数を受け入れます

$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 メッセージのインターフェースを指定します。Laravel リクエストではなく PSR-7 リクエストのインスタンスを取得する場合は、最初にいくつかのライブラリをインストールする必要があります。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) {
// ...
});
lightbulb

ルートまたはコントローラーから PSR-7 レスポンスインスタンスを返すと、自動的に Laravel レスポンスインスタンスに変換され、フレームワークによって表示されます。

入力

入力の取得

すべての入力データの取得

all メソッドを使用して、受信リクエストのすべての入力データを array として取得できます。このメソッドは、受信リクエストが HTML フォームからのものか、XHR リクエストからのものかに関係なく使用できます

$input = $request->all();

collect メソッドを使用すると、受信リクエストのすべての入力データを コレクション として取得できます

$input = $request->collect();

collectメソッドを使用すると、受信リクエストの入力のサブセットをコレクションとして取得することもできます。

$request->collect('users')->each(function (string $user) {
// ...
});

入力値の取得

いくつかの簡単なメソッドを使用すると、リクエストに使用されたHTTP動詞を気にすることなく、Illuminate\Http\Requestインスタンスからすべてのユーザー入力にアクセスできます。 HTTP動詞に関係なく、inputメソッドを使用してユーザー入力を取得できます。

$name = $request->input('name');

inputメソッドの2番目の引数としてデフォルト値を渡すことができます。 この値は、リクエストされた入力値がリクエストに存在しない場合に返されます。

$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');

リクエストされたクエリ文字列値データが存在しない場合、このメソッドの2番目の引数が返されます。

$name = $request->query('name', 'Helen');

引数を指定せずにqueryメソッドを呼び出すと、すべてのクエリ文字列値を連想配列として取得できます。

$query = $request->query();

JSON入力値の取得

アプリケーションにJSONリクエストを送信する場合、リクエストのContent-Typeヘッダーがapplication/jsonに正しく設定されている限り、inputメソッドを介してJSONデータにアクセスできます。 JSON配列/オブジェクト内にネストされている値を取得するために、「ドット」構文を使用することもできます。

$name = $request->input('user.name');

文字列化可能な入力値の取得

リクエストの入力データをプリミティブなstringとして取得する代わりに、stringメソッドを使用して、リクエストデータをIlluminate\Support\Stringableのインスタンスとして取得できます。

$name = $request->string('name')->trim();

整数入力値の取得

入力値を整数として取得するには、integerメソッドを使用します。 このメソッドは、入力値を整数にキャストしようとします。 入力が存在しないか、キャストが失敗した場合、指定したデフォルト値が返されます。 これは、ページネーションやその他の数値入力に特に便利です。

$perPage = $request->integer('per_page');

ブール値入力値の取得

チェックボックスなどのHTML要素を扱う場合、アプリケーションは実際には文字列である「truthy」値を受け取る場合があります。 たとえば、「true」または「on」です。便宜上、booleanメソッドを使用して、これらの値をブール値として取得できます。 booleanメソッドは、1、「1」、true、「true」、「on」、および「yes」に対してtrueを返します。 その他のすべての値はfalseを返します。

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

日付入力値の取得

便宜上、日付/時刻を含む入力値は、dateメソッドを使用してCarbonインスタンスとして取得できます。 リクエストに指定された名前の入力値が含まれていない場合、nullが返されます。

$birthday = $request->date('birthday');

dateメソッドによって受け入れられる2番目と3番目の引数は、それぞれ日付の形式とタイムゾーンを指定するために使用できます。

$elapsed = $request->date('elapsed', '!H:i', 'Europe/Madrid');

入力値が存在するが無効な形式の場合、InvalidArgumentExceptionがスローされます。 したがって、dateメソッドを呼び出す前に、入力を検証することをお勧めします。

列挙型入力値の取得

PHP列挙型に対応する入力値もリクエストから取得できます。 リクエストに指定された名前の入力値が含まれていない場合、または列挙型に入力値と一致するバッキング値がない場合、nullが返されます。 enumメソッドは、入力値の名前と列挙型クラスをそれぞれ最初の引数と2番目の引数として受け入れます。

use App\Enums\Status;
 
$status = $request->enum('status', Status::class);

入力値がPHP列挙型に対応する値の配列である場合、enumsメソッドを使用して、値の配列を列挙型インスタンスとして取得できます。

use App\Enums\Product;
 
$products = $request->enums('products', Product::class);

動的プロパティを介した入力の取得

Illuminate\Http\Requestインスタンスの動的プロパティを使用してユーザー入力にアクセスすることもできます。 たとえば、アプリケーションのフォームの1つに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');
exclamation

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) {
// ...
});

指定された値がリクエストに存在しない場合に実行される2番目のクロージャを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) {
// ...
});

指定された値が「filled」でない場合に実行される2番目のクロージャを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に含まれている検証機能を使用している場合、Laravelの組み込み検証機能の一部がこれらのセッション入力フラッシュメソッドを自動的に呼び出すため、これらのメソッドを手動で直接使用する必要がない可能性があります。

セッションへの入力のフラッシュ

Illuminate\Http\Requestクラスのflashメソッドは、現在の入力をセッションにフラッシュして、ユーザーのアプリケーションへの次のリクエスト中に使用できるようにします。

$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')
);

古い入力の取得

前のリクエストからフラッシュされた入力を取得するには、Illuminate\Http\Requestのインスタンスでoldメソッドを呼び出します。 oldメソッドは、以前にフラッシュされた入力データをセッションからプルします。

$username = $request->old('username');

Laravelは、グローバルなoldヘルパーも提供しています。 Bladeテンプレート内に古い入力を表示する場合は、oldヘルパーを使用してフォームに値を再入力する方が便利です。 指定されたフィールドに古い入力が存在しない場合、nullが返されます。

<input type="text" name="username" value="{{ old('username') }}">

Cookie

リクエストからのCookieの取得

Laravelフレームワークによって作成されたすべてのCookieは、認証コードで暗号化および署名されています。つまり、クライアントによって変更された場合、無効と見なされます。 リクエストからCookie値を取得するには、Illuminate\Http\Requestインスタンスでcookieメソッドを使用します。

$value = $request->cookie('name');

入力のトリミングと正規化

デフォルトでは、Laravelには、アプリケーションのグローバルミドルウェアスタックにIlluminate\Foundation\Http\Middleware\TrimStringsミドルウェアとIlluminate\Foundation\Http\Middleware\ConvertEmptyStringsToNullミドルウェアが含まれています。 これらのミドルウェアは、リクエスト上のすべての受信文字列フィールドを自動的にトリミングし、空の文字列フィールドをnullに変換します。 これにより、ルートやコントローラーでこれらの正規化の問題を心配する必要がなくなります。

入力正規化の無効化

すべてのリクエストでこの動作を無効にする場合は、アプリケーションの`bootstrap/app.php`ファイルで`$middleware->remove`メソッドを呼び出すことによって、アプリケーションのミドルウェアスタックから2つのミドルウェアを削除できます。

use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
use Illuminate\Foundation\Http\Middleware\TrimStrings;
 
->withMiddleware(function (Middleware $middleware) {
$middleware->remove([
ConvertEmptyStringsToNull::class,
TrimStrings::class,
]);
})

アプリケーションへのリクエストのサブセットに対して文字列のトリミングと空の文字列の変換を無効にする場合は、アプリケーションの`bootstrap/app.php`ファイル内で`trimStrings`ミドルウェアメソッドと`convertEmptyStringsToNull`ミドルウェアメソッドを使用できます。 どちらのメソッドもクロージャの配列を受け入れます。クロージャは、入力の正規化をスキップするかどうかを示すために`true`または`false`を返す必要があります。

->withMiddleware(function (Middleware $middleware) {
$middleware->convertEmptyStringsToNull(except: [
fn (Request $request) => $request->is('admin/*'),
]);
 
$middleware->trimStrings(except: [
fn (Request $request) => $request->is('admin/*'),
]);
})

ファイル

アップロードされたファイルの取得

fileメソッドまたは動的プロパティを使用して、Illuminate\Http\Requestインスタンスからアップロードされたファイルを取得できます。 fileメソッドは、PHP SplFileInfoクラスを拡張し、ファイルとの対話のためのさまざまなメソッドを提供するIlluminate\Http\UploadedFileクラスのインスタンスを返します。

$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 メソッドは、ファイルシステムの設定されたルートディレクトリを基準とした、ファイルを保存するパスを受け入れます。ファイル名として一意の ID が自動的に生成されるため、このパスにはファイル名を含めないでください。

store メソッドは、ファイルを保存するために使用するディスクの名前の、オプションの2番目の引数も受け入れます。このメソッドは、ディスクのルートを基準としたファイルのパスを返します。

$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');
lightbulb

Laravel でのファイルストレージの詳細については、ファイルストレージのドキュメント全体を参照してください。

信頼できるプロキシの設定

TLS / SSL 証明書を終了するロードバランサーの背後でアプリケーションを実行している場合、url ヘルパーを使用するときにアプリケーションが HTTPS リンクを生成しない場合があります。通常、これは、アプリケーションがロードバランサーからポート 80 でトラフィックを転送されており、セキュアなリンクを生成する必要があることを認識していないためです。

これを解決するには、Laravel アプリケーションに含まれている Illuminate\Http\Middleware\TrustProxies ミドルウェアを有効にすることができます。これにより、アプリケーションで信頼する必要があるロードバランサーまたはプロキシをすばやくカスタマイズできます。信頼できるプロキシは、アプリケーションの bootstrap/app.php ファイルで trustProxies ミドルウェアメソッドを使用して指定する必要があります。

->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
);
})
lightbulb

AWS Elastic Load Balancing を使用している場合、headers の値は Request::HEADER_X_FORWARDED_AWS_ELB である必要があります。ロードバランサーが RFC 7239 の標準 Forwarded ヘッダーを使用している場合、headers の値は Request::HEADER_FORWARDED である必要があります。 headers の値で使用できる定数の詳細については、Symfony のプロキシの信頼に関するドキュメントを参照してください。

すべてプロキシを信頼する

Amazon AWS または他の「クラウド」ロードバランサープロバイダーを使用している場合、実際のバランサーの IP アドレスがわからない場合があります。この場合、* を使用してすべてのプロキシを信頼できます。

->withMiddleware(function (Middleware $middleware) {
$middleware->trustProxies(at: '*');
})

信頼できるホストの設定

デフォルトでは、Laravel は、HTTP リクエストの Host ヘッダーの内容に関係なく、受信したすべてのリクエストに応答します。さらに、Web リクエスト中にアプリケーションへの絶対 URL を生成するときに、Host ヘッダーの値が使用されます。

通常は、Nginx や Apache などの Web サーバーを設定して、特定のホスト名に一致するリクエストのみをアプリケーションに送信する必要があります。ただし、Web サーバーを直接カスタマイズすることができず、特定のホスト名にのみ応答するように Laravel に指示する必要がある場合は、アプリケーションの Illuminate\Http\Middleware\TrustHosts ミドルウェアを有効にすることで、これを行うことができます。

TrustHosts ミドルウェアを有効にするには、アプリケーションの bootstrap/app.php ファイルで trustHosts ミドルウェアメソッドを呼び出す必要があります。このメソッドの 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'));
})