Skip to main content

コントローラーとは

ルートファイルにすべてのリクエスト処理ロジックをクロージャとして定義する代わりに、「コントローラー」クラスを使ってこの動作を整理できます。 コントローラーは関連するリクエスト処理ロジックを1つのクラスにまとめられます。 例えば UserController クラスは、ユーザーの表示・作成・更新・削除など、ユーザーに関するすべての受信リクエストを処理できます。 デフォルトでは、コントローラーは app/Http/Controllers ディレクトリに格納されます。

コントローラーの作成

新しいコントローラーを素早く生成するには、make:controller Artisanコマンドを使います。 アプリケーションのすべてのコントローラーは、デフォルトで app/Http/Controllers ディレクトリに格納されます。

基本的なコントローラー

コントローラークラスは、受信するHTTPリクエストに応答するいくつかのpublicメソッドを持てます。
コントローラークラスとメソッドを作成したら、次のようにコントローラーメソッドへのルートを定義できます。
受信リクエストが指定されたルートURIに一致すると、App\Http\Controllers\UserController クラスの show メソッドが呼び出され、ルートパラメータがメソッドに渡されます。
コントローラーはベースクラスを継承する必要はありません。ただし、すべてのコントローラーで共有すべきメソッドを持つベースコントローラークラスを継承すると便利な場合があります。

シングルアクションコントローラー

コントローラーのアクションが特に複雑な場合、コントローラークラス全体をその単一のアクションに専念させると便利です。 これを実現するには、コントローラー内に単一の __invoke メソッドを定義します。
シングルアクションコントローラーのルートを登録する場合、コントローラーメソッドを指定する必要はありません。 コントローラー名だけをルーターに渡します。
make:controller Artisanコマンドの --invokable オプションを使って、呼び出し可能なコントローラーを生成できます。

リソースコントローラー

アプリケーション内の各Eloquentモデルを「リソース」と考えると、各リソースに対して同じ操作セット(CRUD)を実行するのが一般的です。 Laravelのリソースルーティングは、典型的な作成・読み取り・更新・削除(CRUD)ルートを、1行のコードでコントローラーに割り当てます。 make:controller Artisanコマンドの --resource オプションを使って、これらのアクションを処理するコントローラーを素早く作成できます。
このコマンドは app/Http/Controllers/PhotoController.php にコントローラーを生成します。 コントローラーには利用可能な各リソース操作のメソッドがスタブとして含まれます。 次に、コントローラーを指すリソースルートを登録します。
この1行のルート宣言で、リソースへのさまざまなアクションを処理する複数のルートが作成されます。 生成されたコントローラーには、これらの各アクションのメソッドがすでにスタブとして含まれています。
php artisan route:list コマンドを実行すると、アプリケーションのルートの概要を素早く確認できます。

部分的なリソースルート

リソースルートを宣言する際に、コントローラーが処理すべきアクションのサブセットを指定できます。

APIリソースルート

APIで使用するリソースルートを宣言する場合、createedit などHTMLテンプレートを表示するルートを除外したいことがよくあります。 apiResource メソッドを使うと、これら2つのルートを自動的に除外できます。

依存性の注入

コンストラクターインジェクション

LaravelのサービスコンテナはすべてのLaravelコントローラーの依存解決に使われます。 そのため、コントローラーのコンストラクターにコントローラーが必要とする依存をタイプヒントで指定できます。 宣言された依存は自動的に解決され、コントローラーインスタンスに注入されます。

メソッドインジェクション

コンストラクターインジェクションに加えて、コントローラーのメソッドの依存もタイプヒントで指定できます。 メソッドインジェクションの一般的なユースケースは、Illuminate\Http\Request インスタンスをコントローラーメソッドに注入することです。
コントローラーメソッドがルートパラメータからの入力も受け取る場合は、他の依存の後にルート引数をリストします。 例えば、ルートが次のように定義されている場合を考えます。
次のようにコントローラーメソッドを定義することで、Illuminate\Http\Request をタイプヒントしながら id パラメータにもアクセスできます。
依存性の注入を活用することで、テスト時にモックを差し込みやすくなり、コードのテスタビリティが向上します。

次のステップ

ルーティング

ルートの定義方法やコントローラーとの連携を振り返ります。
最終更新日 2026年3月29日