【Laravel】ブレード、ブレードテンプレートとは何か?保存場所や基本的な使い方を実例で解説(@のエスケープ方法)

laravel-prograshi(プロぐらし) Laravel
記事内に広告が含まれていることがあります。
[PR]

Laravelを使用していると「ブレード」あるいは「ブレードテンプレート」という言葉をよく耳にする。

ブレードとは何か?

Laravelで使用しているテンプレートエンジン

テンプレートエンジンとは、HTMLとデータ(PHPやJSなど)を組み合わせて出力ようのHTMLファイルを作成するライブラリのこと。

ブレードは.blade.phpという拡張子のファイルで、HTMLとPHPを合わせて記述することができる。

このファイルをブレードテンプレートと呼ぶ。



▼ブレードテンプレートの例
HTMLの中でif文を使うなど。

<div>
 <table>
  @if ($table->getColgroup())
  <colgroup>
    @if ($table->getColgroup())
      @foreach ($table->getColgroup()->getCols() as $col)
        <col width="{{ $col->getWidth() ?: 'auto'}}">
      @endforeach
    @endif
  </colgroup>
  @endif
 </table>
</div>

divタグやtableタグと、@if@foreachなどphpのコードが混ざっている。


ブレードテンプレートの保存場所

resources/views配下に保存する。


viewsフォルダの中に、.blade.phpファイルが格納されている。


ブレードテンプレートの呼び出し

グローバルに定義されているviewヘルパーで呼び出す。

view('ブレードテンプレート名', ['変数名' => '値'])
 ┗ 第2引数で指定した変数に値を代入して渡す


▼viewヘルパーの使用例

Route::get('/', function () {
    return view('greeting', ['name' => 'James']);
});

Routeファサードのgetメソッドで/のパスにアクセスした場合に、greeting.blade.phpを返す。

その際、値Jamesを格納した変数nameを渡す。この文法をブレードシンタックスと呼ぶ。



▼対象のブレード例

Hello, {{ $name }}.

「Hello, James.」が表示される。


・{{ }}の意味

すべて文字列として出力する特殊なecho文。
XSS attack防止仕様(スクリプトを実行しない。)


・{!! !!}の意味

{{ }}と異なりエスケープせずそのまま出力する。
タグを出力したい場合など、こちらを使う。

XSS attack防止のため、ユーザーが入力した内容を出力する場合は{{ }}を使う。


・{{– –}}の意味

コメントアウト。


@ブレードディレクティブ

ブレードテンプレート内で@をつけることで、phpの処理を実行することができる。(コードの省略表記)

@if, @for, @jsonなど多数ある。

この@をブレードディレクティブと呼ぶ。

@jsonディレクティブ

ブレードテンプレートで簡単にjson形式のデータが入ったデータの呼び出しができる。

<script>
    var app = @json($array);
</script>

ディレクティブを使わない通常表記は下記。

<script>
    var app = <?php echo json_encode($array); ?>;
</script>


@jsonディレクティブの呼び出しデータを整形する

第2引数で指定の指示(定義済み定数)を与えると、呼び出したデータを整形できる。

@json($変数名, 定義済み定数)

▼主な定義済み定数

定義済み定数内容
JSON_PRETTY_PRINT返される結果の書式を、スペースを使って整形
JSON_HEX_TAGすべての < および > をそれぞれ \u003C および \u003E に変換
JSON_NUMERIC_CHECK数値形式の文字列を数値としてエンコード

定義済み定数一覧


@@ブレードディレクティブのエスケープ

@を2つつけるとブレードディレクティブのエスケープとなる。

@@json

 ↓ コンパイル結果

@json


@includeディレクティブ

ブレードビュー内で別のビューを呼び出す。

<div>
    @include('shared.errors')

    <form>
        <!-- Form Contents -->
    </form>
</div>

@include('shared.errors')の部分に、shared.errors.blade.phpが表示される。

viewヘルパーと同じく、第二引数でデータを渡すことができる。

@include('view.name', ['status' => 'complete'])
 view.name.blade.phpを読み込む。その際、completeというデータを変数$statusで渡す。

※注意
存在しないビューファイルを指定した場合はエラーになる。


@includeif

存在しない可能性のあるファイルを指定する場合は、@includeifを使う。

@includeIf('view.name', ['status' => 'complete'])


参考リンク

Laravelには@includeや@inlcudeif以外にも様々なディレクティブが用意されています。

【Laravel】@extendsと@includeの違いは何か? @includeif, @includeWhen, @includeUnlessの使い方を実例で解説

タイトルとURLをコピーしました