bladeテンプレートについて
ここまでで利用してきたviewのファイルは xxx.blade.php というように、ただのphpファイルではなく、末尾が.blade.php となっています。
これはbladeテンプレートと呼ばれるものです。 bladeテンプレートには様々な役割がありますが、 まずは基本の変数の表示についてみてみましょう。
web.php
(上部を省略)
Route::get('/blade_sample', function () {
$title = 'bladeテンプレートのサンプルです';
$description = 'bladeテンプレートを利用すると、HTML内にPHPの変数を埋め込むことができます。';
return view('blade_sample',[
'title' => $title,
'description' => $description,
]);
});
view関数の第二引数がポイントです。 bladeテンプレートにおいて、 titleという名前で$titleの値、 descriptionという名前で$descriptionの値 が利用できるように設定しています。
上記を追記したら、さらに blade_sample.blade.php を作成してみましょう。
blade_sample.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>{{ $title }}</title>
</head>
<body>
<h1>{{ $title }}</h1>
<p>{{ $description }}</p>
</body>
</html>
{{ }}に囲んだ形で変数名を指定すると、自動的に変数内の文字列が展開されます。 展開の際には自動的にHTMLエスケープが行われるのが特徴です。
web.php において、$descriptionの値を変更してみましょう
web.php
Route::get('/blade_sample', function () {
$title = 'bladeテンプレートのサンプルです';
$description = 'bladeテンプレートを利用すると、<br>HTML内にPHPの変数を埋め込むことができます。';
return view('blade_sample',[
'title' => $title,
'description' => $description,
]);
});
このように変更しても画面上には改行が反映されず、brタグがそのまま出力(HTMLがエスケープ)されます。
XSS(クロスサイトスクリプティング)など、セキュリティ上の問題を防ぐためHTMLは基本的に必須ですが、 止むを得ない事情でHTMLをエスケープせずに出力する場合には {{ }} の代わりに {!! !!} を利用します。
blade_sample.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>{{ $title }}</title>
</head>
<body>
<h1>{{ $title }}</h1>
<p>{!! $description !!}</p>
</body>
</html>