Laravel - 5. コントローラ
ルーティングの仕組みについて学習したので、次はMVCモデルを構成する要素の一つであるコントローラについて見ていきましょう。
Laravelのコントローラはルーティングから呼び出されるプログラムです。先ほどのサンプルプログラムでは無名関数(クロージャ)を使って処理を実装していましたが、コントローラクラスを作成して処理を実装することもできます。一般的なWebアプリケーションを開発する場合は routes/web.php
ファイルに直接処理を記述するのではなく、コントローラクラスを作成する方がプログラムのメンテナンス性を高めることにつながるでしょう。
コントローラの作成
コントローラを作成するには php artisan make:controller
コマンドを使います。
$ php artisan make:controller コントローラクラス名
コマンドの実行時にはコントローラクラス名を指定するようにします。ここでは HelloController
という名前のコントローラクラスを作成してみましょう。コマンドラインから次のように入力します。
$ php 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@index");
上記のように Route::get
メソッドは第2引数にコントローラクラスのアクションを指定します。クラス名とアクション名の文字列の間には @
を記述します。
ルーティングテーブルの確認
続いてルーティングテーブルを確認してみましょう。コマンドラインから php artisan route:list
コマンドを入力します。
$ php artisan route:list
+--------+----------+----------+------+--------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+----------+------+--------------------------------------------+--------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | hello | | App\Http\Controllers\HelloController@index | web |
+--------+----------+----------+------+--------------------------------------------+--------------+
hello
のAction列に App\Http\Controllers\HelloController@index
と出力されているのがわかります。
動作確認
HelloController
クラスを作成して、ルーティングテーブルの定義を確認できたので、PHPのビルトインWebサーバを使ってWebアプリケーションを起動してみましょう。次のようにコマンドを入力します。
$ php artisan serve --host 0.0.0.0
Laravel development server started: http://0.0.0.0:8000
続いてブラウザを起動してWebアプリケーションにアクセスしてみましょう。
http://localhost:8000/hello
実行結果のように画面に Hello Controller!
という出力を確認できるでしょう。 /hello
というパスへのGETリクエストに割り当てられたアクションメソッド( HelloController
クラスの index
メソッド)が動作しているのがわかります。
まとめ
- コントローラはルートと関連付けるプログラム
php artisan make:controller
コマンドでコントローラクラスを作成する- コントローラではリクエストの解析、モデルの呼び出し、ビューの制御などを行う