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>

results matching ""

    No results matching ""