コントローラーとは
ルートファイルにすべてのリクエスト処理ロジックをクロージャとして定義する代わりに、「コントローラー」クラスを使ってこの動作を整理できます。 コントローラーは関連するリクエスト処理ロジックを1つのクラスにまとめられます。 例えばUserController クラスは、ユーザーの表示・作成・更新・削除など、ユーザーに関するすべての受信リクエストを処理できます。
デフォルトでは、コントローラーは app/Http/Controllers ディレクトリに格納されます。
コントローラーの作成
新しいコントローラーを素早く生成するには、make:controller Artisanコマンドを使います。
アプリケーションのすべてのコントローラーは、デフォルトで app/Http/Controllers ディレクトリに格納されます。
基本的なコントローラー
コントローラークラスは、受信するHTTPリクエストに応答するいくつかのpublicメソッドを持てます。App\Http\Controllers\UserController クラスの show メソッドが呼び出され、ルートパラメータがメソッドに渡されます。
コントローラーはベースクラスを継承する必要はありません。ただし、すべてのコントローラーで共有すべきメソッドを持つベースコントローラークラスを継承すると便利な場合があります。
シングルアクションコントローラー
コントローラーのアクションが特に複雑な場合、コントローラークラス全体をその単一のアクションに専念させると便利です。 これを実現するには、コントローラー内に単一の__invoke メソッドを定義します。
make:controller Artisanコマンドの --invokable オプションを使って、呼び出し可能なコントローラーを生成できます。
リソースコントローラー
アプリケーション内の各Eloquentモデルを「リソース」と考えると、各リソースに対して同じ操作セット(CRUD)を実行するのが一般的です。 Laravelのリソースルーティングは、典型的な作成・読み取り・更新・削除(CRUD)ルートを、1行のコードでコントローラーに割り当てます。make:controller Artisanコマンドの --resource オプションを使って、これらのアクションを処理するコントローラーを素早く作成できます。
app/Http/Controllers/PhotoController.php にコントローラーを生成します。
コントローラーには利用可能な各リソース操作のメソッドがスタブとして含まれます。
次に、コントローラーを指すリソースルートを登録します。
php artisan route:list コマンドを実行すると、アプリケーションのルートの概要を素早く確認できます。部分的なリソースルート
リソースルートを宣言する際に、コントローラーが処理すべきアクションのサブセットを指定できます。APIリソースルート
APIで使用するリソースルートを宣言する場合、create や edit などHTMLテンプレートを表示するルートを除外したいことがよくあります。
apiResource メソッドを使うと、これら2つのルートを自動的に除外できます。
依存性の注入
コンストラクターインジェクション
LaravelのサービスコンテナはすべてのLaravelコントローラーの依存解決に使われます。 そのため、コントローラーのコンストラクターにコントローラーが必要とする依存をタイプヒントで指定できます。 宣言された依存は自動的に解決され、コントローラーインスタンスに注入されます。メソッドインジェクション
コンストラクターインジェクションに加えて、コントローラーのメソッドの依存もタイプヒントで指定できます。 メソッドインジェクションの一般的なユースケースは、Illuminate\Http\Request インスタンスをコントローラーメソッドに注入することです。
Illuminate\Http\Request をタイプヒントしながら id パラメータにもアクセスできます。
次のステップ
ルーティング
ルートの定義方法やコントローラーとの連携を振り返ります。