Laravel - 6. ビュー

コントローラの仕組みについて学習したので、次はMVCモデルを構成する要素の一つであるビューについて見ていきましょう。

Laravelのビューはコントローラやルーティングに定義した無名関数から呼び出し可能なプログラムです。一般的なWebアプリケーションにおいてはHTMLソースを出力するために使います。

Blade Template

LaravelにはBladeというテンプレートエンジンが用意されています。テンプレートエンジンとはHTMLなどのテンプレートにデータを合成して表示する仕組みです。具体的にはHTMLコードの中に {{ $title }} のように変数の出力を埋め込んだり、 @if ディレクティブや @for ディレクティブを使うことで分岐構造や反復構造を簡単に記述したりできるようになっています。

注意点としては、Bladeを使ったビューファイルはコントローラのようにコマンドでは作成しません。テキストエディタなどを使って resources/views/ フォルダ下に作成します。このときファイルの拡張子を .blade.php とします。

それでは実際にビューファイルを作成してみましょう。ここでは既存の resources/views/ フォルダに hello という名前のフォルダを作成しておきましょう。それから次のように resources/views/hello/index.blade.php ファイルを作成します。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Sample</title>
</head>
<body>
  <h1>{{ $title }}</h1>
</body>
</html>

上記の index.blade.php ファイルでは h1 タグのなかに {{ }} を使って $title 変数の内容を出力しています。この $title 変数をコントローラで定義して、ビューから参照するように実装します。

続いて app/Http/Controllers/HelloController.php ファイルの index アクションを編集してビューファイルを呼び出すように修正します。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function index()
    {
        $title = "Hello View!";
        return view("hello/index", ["title" => $title]);
    }
}

コントローラの出力をビューで行うにはLaravelの view 関数を使用します。 view 関数は第1引数にビューテンプレート名、第2引数にはビューに出力する変数名を連想配列で指定します。

第1引数の "hello/index"resources/views/ フォルダの中の hello/index.blade.php とリンクします。"hello.index" と記述することもできます。

また view メソッドの第2引数に compact 関数を利用することも多いです。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function index()
    {
        $title = "Hello View!";
        // return view("hello/index", ["title" => $title]);
        return view("hello/index", compact("title"));
    }
}

compact 関数は引数で指定された名前の変数を連想配列に変換します。

compact 関数の詳細についてPHPマニュアルを参考にしてください。 https://www.php.net/manual/ja/function.compact.php

動作確認

コントローラを修正したので、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 View! という出力を確認できるでしょう。この結果からコントローラ内で定義した $title 変数をビューファイル( resources/views/hello/index.blade.php )の中から参照できているのがわかります。

またブラウザ上でHTMLソースを表示してみましょう。

上記のようにLaravelのBladeテンプレートエンジンによって生成されたHTMLソースを確認できるでしょう。

まとめ

  • ビューはアプリケーションの出力結果を制御する
  • コントローラはリクエストの処理結果をビューを使って出力する
  • LaravelはデフォルトでBladeと呼ばれるテンプレートエンジンを利用する