エンジニ屋.com(エンジニヤドットコム)

分かりやすくを意識して情報発信!

【Laravel】 Requestクラス、複数あるけどどう違う?(Illuminate\Http・Client・Support\Facades, Symfony\Component\.., GuzzelHttp...)【比較】

LaravelでRequestクラスを呼び出そうとすると、Vs codeの拡張機能の補完機能で下記画像のように複数のRequestクラスが提案されます。

コマンド(php artisan make:controller)でControllerのファイルを作成した場合、 use Illuminate\Http\Requestがデフォルトで記述されているので、基本的にこちらのRequestクラスを使用することが多い思います。が、


Requestクラスは、どれをどの用途で使うんだっけ?

となったりするので、

本記事では、具体例を挙げ、それぞれのRequestクラスの異なる目的や機能の用途をまとめました。

補完機能で提案される以下の通りの順番で解説していきます。

GuzzleHttp\Psr7\Request

Illuminate\Http\Client\Request

Illuminate\Http\Request

Illuminate\Support\Facades\Request

Symfony\Component\HttpFoundation\Request

GuzzleHttp\Psr7\Request

このRequestクラスは、Guzzle HTTPクライアントライブラリの一部です。

このクラスは、HTTPリクエストを表現し、PSR-7 HTTPメッセージインターフェイス1に準拠しています。

主に、外部のWebサービスやAPIにリクエストを送信する際に使用されます。

例えば、

use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;

// Guzzle HTTPクライアントをインスタンス化
$client = new Client();

// HTTPリクエストを作成(例: GETメソッドで https://api.example.com/users にアクセス)
$request = new Request('GET', 'https://api.example.com/users');

// リクエストを送信し、レスポンスを取得
$response = $client->send($request);

// レスポンスボディを取得し、出力
echo $response->getBody();

このコードでは、まず GuzzleHttp\Client クラスのインスタンスを作成しています。

次に、GuzzleHttp\Psr7\Request を使ってHTTPリクエストを作成しています。

この例では、GETメソッドで https://api.example.com/users にアクセスするリクエストを作成しています。

作成したリクエストを send() メソッドで送信し、レスポンスを取得しています。

最後に、レスポンスボディを取得して出力しています。

このように、GuzzleHttp\Psr7\Request を使ってHTTPリクエストを作成し、Guzzle HTTPクライアントで送信することができます。

Illuminate\Http\Client\Request

このRequestクラスは、LaravelのHTTPクライアント機能の一部で、外部APIへのリクエストを作成するために使用されます。

通常、このクラスを直接インスタンス化することはありません。

代わりに、Httpファサード(Illuminate\Support\Facades\Http)や先ほどのGuzzleを使用してHTTPリクエストを作成し、送信します。

use Illuminate\Http\Request

このRequestクラスは、Laravelフレームワークのコアコンポーネントで、クライアントからのリクエストを表現します。

このクラスは、入力データの取得やバリデーションなど、アプリケーション内でリクエストを処理する際に使用されます。

通常、コントローラのメソッドでタイプヒント2として指定され、Laravelのサービスコンテナによって自動的に注入されます。

例えば、

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users',
        ]);

        // バリデーション後のデータを使用
        $user = User::create($validatedData);
    }
}

この例では、Laravelのコントローラで受信したリクエストデータをバリデーションして、新しいユーザーを作成しています。

リクエストデータをバリデーションし、バリデーション後のデータを使用してユーザーを作成しています。

use Illuminate\Support\Facades\Request

このRequestは、Laravelのファサードで、Illuminate\Http\Requestインスタンスへのアクセスを提供します。

このファサードを使うことで、アプリケーションのどこからでも現在のリクエストインスタンスにアクセスできます。

例えば、

use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Request;

Route::get('/greet', function () {
    $name = Request::input('name', 'Guest');
    return 'Hello, ' . $name;
});

この例では、/greet エンドポイントに対する GET リクエストで、Request::input() メソッドを使用して、リクエストデータ(ここでは name パラメータ)にアクセスしています。

Request::input() の第2引数は、パラメータが存在しない場合のデフォルト値を指定できます。この例では、name パラメータが存在しない場合は 'Guest' がデフォルト値となります。

このように、Illuminate\Support\Facades\Request ファサードを使用することで、ルート定義のクロージャ内やコントローラーメソッドの外でリクエストデータにアクセスすることができます。

注意点として、コントローラのメソッドでは、先ほどのIlluminate\Http\Request クラスのインスタンスを引数として受け取る方法が推奨されます。

これにより、コードの可読性が向上します。

メソッドの引数として、Illuminate\Support\Facades\Request ファサードは受け取ることができません。

Symfony\Component\HttpFoundation\Request

このRequestクラスは、Symfony HttpFoundationコンポーネントの一部で、HTTPリクエストを表現します。

Laravelは、多くのSymfonyコンポーネントを内部で使用しており、このクラスもその一つです。

ただし、直接このクラスを使用することはまれで、通常はIlluminate\Http\Requestクラスが代わりに使用されます。

以上となります。

それぞれのRequestクラスは、異なる目的や機能を持っていて普段使用しないものあることが分かりました。

use宣言では適切なクラスを指定する注意が必要だと感じました。

良ければTwitterのフォローもお願いいたします!

お疲れ様でした。


  1. PSR-7は、PHPのHTTPメッセージインターフェイスに関する標準規格で、PHP Standard Recommendation(PSR)の7番目の規格です。PSR-7は、PHPフレームワーク間で共通のHTTPメッセージインターフェイスを提供することを目的としています。これにより、異なるフレームワークやライブラリが共通のインターフェイスを使用してHTTPリクエストとレスポンスを扱うことができ、互換性と再利用性が向上します。
  2. タイプヒント(型ヒント)は、PHPの機能で、関数やメソッドの引数や戻り値に期待される型を明示するために使用されます。タイプヒントは、コードの可読性を向上させ、予期しない型のデータによるバグを防ぐのに役立ちます。また、タイプヒントを使用することで、開発者が関数やメソッドを使用する際に期待される型がわかりやすくなります。