Laravel - 5. コントローラ
ルーティングの仕組みについて学習したので、次はMVCモデルを構成する要素の一つであるコントローラについて見ていきましょう。
Laravelのコントローラはルーティングから呼び出されるプログラムです。先ほどのサンプルプログラムでは無名関数(クロージャ)を使って処理を実装していましたが、コントローラクラスを作成して処理を実装することもできます。一般的なWebアプリケーションを開発する場合は routes/web.php
ファイルに直接処理を記述するのではなく、コントローラクラスを作成する方がプログラムのメンテナンス性を高めることにつながるでしょう。
コントローラの作成
コントローラを作成するには ./vendor/bin/sail artisan make:controller
コマンドを使います。
$ ./vendor/bin/sail artisan make:controller コントローラクラス名
コマンドの実行時にはコントローラクラス名を指定するようにします。ここでは HelloController
という名前のコントローラクラスを作成してみましょう。コマンドラインから次のように入力します。
$ ./vendor/bin/sail artisan make:controller HelloController
Controller created successfully.
コマンドが成功すると Controller created successfully.
というメッセージが表示されます。このとき app/Http/Controllers/HelloController.php
ファイルが作成されています。 テキストエディタを開いて app/Http/Controllers
フォルダの中から app/Http/Controllers/HelloController.php
ファイルを開いてみましょう。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelloController extends Controller
{
//
}
Laravelのコントローラクラスは Controller
クラスを継承して作成します。作成した HelloController
クラスには必要に応じてプロパティやメソッドを追加します。ここでは手始めに index
という名前でメソッドを追加してみましょう。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelloController extends Controller
{
public function index()
{
return 'Hello Controller!';
}
}
作成した index
メソッドは戻り値に 'Hello Controller!'
という文字列データを返します。このようにコントローラクラスに定義したメソッドのことをアクションやアクションメソッドなどと呼びます。このアクションメソッドは以前に学習したルーティング情報( routes/web.php
)と関連付けることができます。
routes/web.php
を修正して HelloController
の index
アクションとの関連付けてみましょう。
<?php
Route::get('/', function () {
return view('welcome');
});
Route::get('/hello', [HelloController::class, 'index']);
上記のように Route::get
メソッドは第2引数にコントローラクラスとアクションを配列で指定します。配列の先頭要素には HelloController::class
のようにクラス名を指定し、2番目の要素にはアクション名を文字列で指定します。
ルーティングテーブルの確認
続いてルーティングテーブルを確認してみましょう。コマンドラインから ./vendor/bin/sail artisan route:list
コマンドを入力します。
$ ./vendor/bin/sail artisan route:list --compact
+----------+---------------------+------------------------------------------------------------+
| Method | URI | Action |
+----------+---------------------+------------------------------------------------------------+
| GET|HEAD | / | Closure |
| GET|HEAD | api/user | Closure |
| GET|HEAD | hello | App\Http\Controllers\HelloController@index |
| GET|HEAD | sanctum/csrf-cookie | Laravel\Sanctum\Http\Controllers\CsrfCookieController@show |
+----------+---------------------+------------------------------------------------------------+
hello
のAction列に App\Http\Controllers\HelloController@index
と出力されているのがわかります。
動作確認
HelloController
クラスを作成して、ルーティングテーブルの定義を確認できたので、ブラウザからWebアプリケーションにアクセスしてみましょう。
http://localhost/hello
実行結果のように画面に Hello Controller!
という出力を確認できるでしょう。 /hello
というパスへのGETリクエストに割り当てられたアクションメソッド( HelloController
クラスの index
メソッド)が動作しているのがわかります。
まとめ
- コントローラはルーティングと関連付けるプログラム
./vendor/bin/sail artisan make:controller
コマンドでコントローラクラスを作成する- コントローラではリクエストの解析、モデルの呼び出し、ビューの制御などを行う