PHPフレームワーク「Laravel」MVCとコントローラを利用する
前回は、ルーティングを利用してWebページを表示する解説を行いましたが、Laravelでは通常Webページの処理は「コントローラ」を利用して行います。
今回は、LaravelのMVCとコントローラについて解説します。
コントローラとは?
前回のルーティング(Route::get())はアクセスしたアドレスを元にWebページの表示処理を行いましたが、通常は、アクセスしたアドレスをもとに各処理を割り振るための機能となります。
Laravelでは、実際にWebページを表示処理するための機能が他に備わっています。それが、コントローラです。
MVCとは?
Laravelの機能「コントローラ」を理解するにはMVC(Model-View-Controller)アーキテクチャを理解する必要があります。
MVCとは、3つの要素を組み合わせページを構築していく考え方です。
モデル(Model) | データ処理を主に担当し、データベースとの接続に関する処理を扱います。 |
ビュー(View) | Webページの表示を担当します。テンプレート機能などを利用する部分がこれにあたります。 |
コントローラ(Controller) | MVC全体の制御を担当します。処理の内容によってModelを利用したり、Viewを利用したりします。 |
今回はMVCの「C:コントローラ」を理解していきます。
コントローラを作成する
コントローラを利用するには、まず、コントローラを作成する必要があります。
コントローラの作成にはターミナルを利用し「artisan(アーティザン)」コマンドを実行します。
今回は、「laravelapp」ディレクトリ内に構築されたlaravelの環境に「TestController」を作成します。
※コマンドを実行する前にlaravelが配置されたディレクトリに移動しておきます。
1 2 | laravelapp % php artisan make:controller TestController Controller created successfully. |
上記のコマンドを実行すると、完了のコメントが表示され、「app」→「Http」→「Controllers」内に「TestController.php」が作成されていることがわかります。
TestController.phpの内容
TestController.phpが作成されたらエディタで開き内容を確認してみましょう。
TestControllerはControllerクラスを継承したクラスで作成されていることがわかります。
1 2 3 4 5 6 7 8 9 10 | <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class TestController extends Controller { // } |
アクションを追加
それでは、TestController.phpにアクションを追加してみます。
index()メソッドを追加した状態が下記となります。
内容はreturnでHTMLソースを出力するだけの簡単なものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class TestController extends Controller { public function index(){ return <<<EOF <html> <body> <h1>テストコントローラーindex</h1> <p>テストコントローラからの出力<br>テストコントローラからの出力です。</p> </body> </html> EOF; } } |
ルート情報を用意
コントローラにアクションを追加したら、「routes」ディレクトリのweb.phpを開き、コントローラに追加したアクションにルートを割り当てる設定を行います。
Route::get()の第一引数にアクセスするURLの文字列、第二引数に利用する「コントローラ名@アクション名」を記述します。
1 | Route::get( 'test', 'App\Http\Controllers\TestController@index' ); |
ルートの割り当てが完了したら、http://〇〇/test/でアクセスしてみてください。
TestController.phpに追記したindexメソッドが実行されていることがわかります。
複数のアクションを追加
それではindexメソッド以外にもアクションを追加してみます。
indexメソッドの下にotherメソッドを追加しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class TestController extends Controller { public function index(){ return <<<EOF <html> <body> <h1>テストコントローラーindex</h1> <p>テストコントローラからの出力<br>テストコントローラからの出力です。</p> </body> </html> EOF; } public function other(){ return <<<EOF <html> <body> <h1>コントローラーother</h1> <p>コントローラからの出力(otherメソッド)<br>コメントが入ります。</p> </body> </html> EOF; } } |
メソッドを追加したら、ルート情報も新たに追加します。
1 2 | Route::get( 'test', 'App\Http\Controllers\TestController@index' ); Route::get( 'test/other', 'App\Http\Controllers\TestController@other' ); |
これで
- http://〇〇/test/ でのアクセスはindexメソッドが実行されます。
- http://〇〇/test/other/ でのアクセスはotherメソッドが実行されます。
シングルアクションコントローラ
複数のアクションを設定するのとは反対に1コントローラに1アクションのみの設定も可能です。
このような設定のことを「シングルアクションコントローラ」と言います。
シングルアクションコントローラには通常のめっソドとは違う「__invoke」メソッドを利用します。
まず、シングルアクションコントローラを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class SingleController extends Controller { public function __invoke(){ return <<<EOF <html> <body> <h1>シングルアクションコントローラ</h1> <p>シングルアクションコントローラからの出力<br>コントローラからの出力です。</p> </body> </html> EOF; } } |
次にルート情報を設定します。
シングルアクションコントローラのルート情報をせ亭する場合は、Route::get( ‘アドレス’, ‘コントローラ名’); で設定が可能で、アクション名が不要となります。
1 | Route::get( 'single', 'App\Http\Controllers\SingleController' ); |
S.E->お勧め記事;
- PHP フレームワーク Laravel ディレクティブ – ループ変数 $loop –
- PHPフレームワーク「Laravel」PHPテンプレートを利用する
- PHPフレームワーク「Laravel」Bladeテンプレートを利用する
- PHPフレームワーク「Laravel」ディレクティブ-繰り返し処理(ループ処理)-
- macOS Monterey にアップデート後、composerやhomebrewでenv: php: No such file or directoryが出る
- XSERVERにSSHを利用してLaravel環境を構築する
- PHPフレームワーク「Laravel」ルーティング Route::get()
- Laravel開発環境をgitでコミットする際の注意点
- PHPフレームワーク「Laravel」ディレクティブ-分岐処理(条件分岐)-