コントローラとアクションメソッド
フレームワークでは、「MVC」という単語が良く出てきます。
Model View Controller の頭文字をとってMVCです。
LaravelでもMVCの流れでデータを処理します。
前項でルーティングのお話をしましたが、ルーティングは、基本的にコントローラーを呼び出します。前項では、説明の為に直接画面出力したりViewのレイアウトファイルを呼び出してましたが、ウェブシステムのプログラムでは、複雑な処理をするのが普通なのでルーティンは、コントローラーに処理を渡します。
コントローラの呼び出し
例としてルーティング(web.php)からコントローラを呼び出しましょう。
以下ののように記述すると「/user」にアクセスがあると「UserContoroller」の「index」メソッドを呼び出します。
web.php に以下を追記
1 2 |
Route::get('/user', [App\Http\Controllers\UserController::class, 'index']); Route::get('/user/form', [App\Http\Controllers\UserController::class, 'form']); |
http://localhost:8000/user のアクセスでは、「UserController」の「index」メソッド
http://localhost:8000/user/form のアクセスでは、「UserController」の「form」メソッド
Route::getメソッドの
第1引数 アドレス(パス)
第2引数 コントローラのパスとアクションメソッドの配列
この書式は、覚えてしましましょう。
POSTリクエストの場合は、最初の部分が「Route::post」になります。
コントローラの作成
コントローラーが未作成なので作成コマンドも紹介しておきます。
Laravelのコントローラファイルの作成は、artisanコマンドに用意されてます。
php artisan make:Controller コントローラ名
今回は、ユーザーコントローラーファイルを作成するので以下になります。
1 |
php artisan make:Controller UserController |
実行すると「app\Http\Controllers」ディレクトリの中に「UserController.php」が作成されています。
中はこんな感じでしょうか。
1 2 3 4 5 6 7 8 9 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { // } |
アクションメソッド
このファイルに先のルーティングに記載済みのアクションメソッドを追記しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { // public function index(Request $request) { echo "index"; } public function form(Request $request) { echo "form"; } } |
ルーティングから呼び出されるコントローラのメソッドをアクションメソッドと呼びます。
上記ソースの「index」と「form」です。
このメソッド内に必要な処理を書きます。
データベースのクエリを書いたりViewの呼び出しなど。
アクションメソッドの引数
メソッドの引数に「Request $request」のようにリクエスト型の引数を設定することでリクエスト値を取得できメソッド内で扱うことができます。
PHPのグローバル「$_GET」、「$_POST」と似てますがLaravelでは「Request型」で扱うことでより機能的に使えます。
ルーティングで以下のように波カッコで指定していればURLの一部を変数として受け取れます。
例えば以下のURLでアクセスした場合
http://localhost:8000/user/edit/1
web.php
1 |
Route::get('/user/edit/{id}', [App\Http\Controllers\UserController::class, 'edit']); |
UserController のeditアクションメソッド
1 2 3 4 |
public function edit(Request $request) { echo $request->id; } |
ブラウザでは、「1」が出力されます。
postメソッドの値も同様に Request変数で取得が出来ますが具体的な説明は後にします。
とろあえずこれで、ルーティングからコントローラを呼び出して出力できるようになりました。
次項では、コントローラからレイアウトファイルを出力しましょう。
MVCの「V」にあたる「view」です。