コントローラからビューを呼び出してみる

今回は、MVCパターンのV、ビューの仕組みと呼び出し方を解説します。

ビューは、表示を制御するための仕組みです。
Webアプリケーションは、リクエストを受けると最終的にHTMLを生成してレスポンスとして返します。
HTMLをレスポンスするメソッドをコントローラに書いてみましょう。

    public function hello() {
        $html = <<<HTML
<html>
    <head>
        <title>Hello laravel</title>
    </head>
<body>
    <h1>This is HTML Document.</h1>
</body>
</html>
HTML;

        return $html;
    }

ルーティング設定をして、ページにアクセスしてみましょう。

Route::getメソッドで、同じパスで重複してルーティング設定しないように注意してください。パスが重複していると、最後に設定したルーティングが有効になります。

Route::get('/hello', 'SampleController@hello);
http://127.0.0.1:8000/hello

helloメソッドに書いたHTMLドキュメントが出力されました。


これでHTMLを出力することができるのですが、
MVCパターンで考えてみると、この実装方法はNGです。
MVCパターンでは、表示の制御はビューが担うべきですが、この実装ではコントローラ内に「HTMLを生成する」という表示の制御が書かれてしまっています。
HTMLはビジネスロジックとは切り離して、HTMLファイルとして扱いたいですね。
そこで、Laravelではbladeテンプレートというビュー機能を提供しています。

resources/viewsフォルダ内にhello.blade.phpという名前でファイルを新規作成して、次のようなHTMLを書きます。
bladeテンプレートファイルの拡張子は必ず「.blade.php」とします。

<html>
    <head>
        <title>Hello laravel</title>
    </head>
<body>
    <h1>This is Blade Template.</h1>
</body>
</html>

次に、コントローラのhelloメソッドを書き換えます。

    public function hello() {
        $html = view('hello');
        return $html;
    }

ブラウザで表示を確認してみます。

http://127.0.0.1:8000/hello

bladeテンプレートに書いたHTMLが出力されました。

view関数はbladeテンプレートの内容を文字列として返すヘルパ関数です。第1引数には呼び出したいbladeテンプレートのファイル名から拡張子(.blade.php)を抜いた文字列を渡します。hello.blade.phpを呼び出したいので、view(‘hello’)としています。

ここでは、わかりやすくview関数で取得した文字列を$html変数に格納してからreturnしていますが、コントローラ内でHTML文字列に手を加えることはしないので、通常は次のように書くことが多いです。

    public function hello() {
        return view('hello');
    }

このように、bladeテンプレートにHTMLを記述して、コントローラからビューとして呼び出し取得することによって、コントローラからビューを分離することができます。
httpリクエストからレスポンスまでの処理の流れは次のようになっています。

処理の流れ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Laravel

次の記事

ビューに値を引き渡す