MVC
MVCについておさらいをしておきます。
Laravelに限らず、いわゆるフレームワークと呼ばれる開発環境はMVCと呼ばれる機能のモジュール化とモデル化を行っています。
M(Model)
V(View)
C(Contoroll)
+R(Route)
Model はデータの処理を行う部分です。データベースとの連携を行います。
Viewはユーザーインターフェースを管理する部分です。
ContorollはユーザーからのHTTPリクエストに対し、そのURL(厳密には次で触れるRouteからの要求)を見てどういった処理をModelやViewに渡すか、ということを制御します。
RouteはブラウザからとんできたURLをみてどのControllerに渡すのかを定義します。
この関係性を図にしてみます。
コントローラーについて
先回の投稿でご紹介したようにルートにはURLとともに具体的に実行すべき処理が定義されていました。
先回はサンプルとして第二引数にメソッドを書き、その中にHTMLを記述して画面を表示させましたが、それは少し邪なやり方になります。
本来は第二引数で呼び出すのは「コントローラ」です。
コントローラはMVC全体の制御を行います。そのためにModelを呼び出したり、Viewに画面を作らせて表示をしたり、まさに要の仕事をします。
コントローラが行う仕事はapp>Http>Controllers 配下に置くコントローラーファイルに記述します。
デフォルトで「Controller.php」が作成されているので概要を確認してみます。
namespace というのは当のクラスがディレクトリのどの場所に存在するのかを宣言する箇所です。
そのあと、引用クラスが列記されています。
このController.php はBaseControllerを含めてComposerが収集してきた様々なクラスを継承して様々な機能を実装しています。
これから作成する個別アプリ用コントローラーファイルはこのController.phpを継承することになります。
コントローラーの作成
コントローラーを作成します。
その前に、前回のルートのところでコントローラー名を先行して決めてしまっているので確認します。
Route::get('/', 'App\Http\Controllers\DmenController@showFront')->name('front');
コントローラー名:DmenController
メソッド名:showFront()
まずはDmenControllerを作成します。
コントローラーの作成はartisanコマンドで行います。
php artisan make:controller DmenController
コントローラーの生成が完了すると"Controller created successfully."のメッセージが表示されます。
そしてapp>Http>Controllers 配下に「DmenController.php」が出来上がっています。
namespaceは先に触れた通り。
継承するクラスはかなりシンプルになっているように見えますが、先のController.php を継承しているので、DmenController自身が数多くの機能を実装しています。
use *** で継承しているRequestクラスは後々重要になるクラスです。
ここまで確認したら次にメソッドを記述します。
メソッドの作成
このコントローラーファイルには様々なメソッドを定義してRouteからの様々な指定に応答することができます。
それらのメソッドはアクションとも呼ばれ、Routeの第二引数の@以下で指定することができます。
今回の例ではshowFrontメソッドを記述します。
まず、showFront()のなかにサンプル表示のためのHTMLを書いて、それをreturnさせます。
この状態で
ブラウザでlocalhost:8000 を叩きます。
showFrint()の中に書いたサンプルHTMLが表示されています。
つまり
①Route::get で'/'(つまりトップページ)のURL指定が来た場合、
②コントローラー App\Http\Controllers\DmenController の
③showFront() に処理を渡す
④仕事を引き継いだDmenController.php は自らに定義されているアクション(メソッド)showFront()を実行する。
⑤showFront()にはHTMLコードが書かれていて、それをreturn つまりブラウザに出力する
こうした手順が動いているわけです。
この例ではshowFrint()の中に直接コードを書きましたが、複雑なシステムになるとこうしたやり方にも限界が出てきます。
Laravel 一般的に各Actionの中に今度はV(View)に仕事を渡すコードが書かれます。
今回は次回の実演用にshowFront()の中に
return view('dmen.sel_sha');
というコードを書いておきます。
view関数で指定したテンプレートをロードし、レンダリングする。
そして、return でそれを返す(ブラウザに表示する)というコードです。
このテンプレート'dmen.sel_sha'はブレードとも呼ばれ、V(View)の主要ファイルです。
.で区切った前半部はViewディレクトリ配下にフォルダを作った場合のフォルダ名。
後半はブレードファイル名です。
このブレードは次回の投稿時にViewの解説とともに作成します。
Comments