Skip to content

HTTPリクエスト

はじめに

LaravelのIlluminate\Http\Requestクラスは、アプリケーションが処理している現在のHTTPリクエストと、リクエストと共に送信された入力、クッキー、ファイルを取得するためのオブジェクト指向の方法を提供します。

リクエストとのやり取り

リクエストの取得

依存性注入を介して現在の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']);

リクエストホストの取得

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

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

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

methodメソッドは、リクエストのHTTP動詞を返します。isMethodメソッドを使用して、HTTP動詞が指定された文字列と一致するかどうかを確認できます:

$method = $request->method();

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

リクエストヘッダ

Illuminate\Http\Requestインスタンスからリクエストヘッダを取得するには、headerメソッドを使用できます。リクエストにヘッダが存在しない場合、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) {
    // ...
});

Note

ルートまたはコントローラから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要素を扱う場合、アプリケーションは実際には文字列である"真"の値を受け取ることがあります。例えば、"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メソッドは、入力値の名前と列挙型クラスを第1引数と第2引数として受け取ります。

use App\Enums\Status;

$status = $request->enum('status', Status::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');

Warning

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メソッドには、指定された値がリクエストに存在しない場合に実行される第2クロージャを渡すことができます。

$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メソッドには、指定された値が"filled"でない場合に実行される第2クロージャを渡すことができます。

$request->whenFilled('name', function (string $input) {
    // "name"値がfilled...
}, function () {
    // "name"値がfilledでない...
});

リクエストに指定されたキーが存在しないかどうかを判断するには、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では、次のリクエスト中に1つのリクエストからの入力を保持することができます。この機能は、検証エラーを検出した後にフォームを再入力する場合に特に便利です。ただし、Laravelの組み込みの検証機能を使用している場合、これらのセッション入力フラッシュメソッドを直接使用する必要がない可能性があります。Laravelの一部の組み込み検証機能は、自動的にこれらのメソッドを呼び出すためです。

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

セッションに入力をフラッシュする方法については、Laravelのドキュメントを参照してください。

Illuminate\Http\Requestクラスのflashメソッドは、現在の入力をセッションに保存します。これにより、ユーザーが次にアプリケーションにリクエストを送信したときにそのデータが利用可能になります。

$request->flash();

また、flashOnlyflashExceptメソッドを使用して、リクエストデータの一部をセッションに保存することもできます。これらのメソッドは、パスワードなどの機密情報をセッションから除外するのに便利です。

$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') }}">

クッキー

リクエストからクッキーを取得

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

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

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

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

入力の正規化を無効にする

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

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ファイル内でtrimStringsconvertEmptyStringsToNullミドルウェアメソッドを使用できます。どちらのメソッドも、入力の正規化をスキップするかどうかを示す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メソッドは、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クラスには、アップロードされたファイルをディスクの1つに移動する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');

Note

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

Note

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ヘッダーの内容に関係なく、アプリケーションへの絶対URLを生成する際にHostヘッダーの値を使用します。

通常、この動作は望ましいものですが、一部の環境では、アプリケーションが特定のホスト名のみに応答するように制限する必要がある場合があります。これを実現するために、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'));
})

ユーザーノート