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と呼ばれるテンプレートエンジンを利用する