【Laravel】Bladeの繰り返し構文




Bladeテンプレートエンジンでの繰り返し処理をまとめます。
だいたいPHPのまんまですが、forelseとかeachなどBlade固有なものもあります。

@forディレクティブ

PHPのfor文と全く同じ。
Laravelを選ぶ人なら楽勝ですね。

@for ($i = 0; $i < 5; $i++)
    No.{{ $i }}
@endfor

@foreachディレクティブ

こちらもPHPのforeach文と全く同じ。
Laravelを選ぶ人なら楽勝ですね。

@php
$datas = [
    1 => 'aa',
    2 => 'bb',
    3 => 'cc',
];
@endphp
@foreach ($datas as $key => $data)
    key:{{ $key }} data:{{ $data }}
@endforeach

@forelseディレクティブ

これはforeachとほぼ同じですが、配列・オブジェクトがからの場合、emptyディレクティブの処理を行う特徴があります。

@php
$datas = [
    1 => 'aa',
    2 => 'bb',
    3 => 'cc',
];
@endphp
@forelse ($datas as $key => $data)
key:{{ $key }} data:{{ $data }}
@empty
    forelseでデータが空だった
@endforelse

@whileディレクティブ

PHPのwhile文と全く同じ。

@php
$cnt = 0;
@endphp
@while ($cnt < 3)
    条件が真の間はループ{{ $cnt++ }}
@endwhile

@eachディレクティブ

foreachでliやtrタグを出力する処理なんかで使えそうなディレクティブ。
レンダービューといいます。
第2引数で指定したテンプレートを読み込みます。第4引数が設定されている場合は、第1引数のテンプレートが存在しない場合、第4引数のテンプレートを読み込みます。
第2引数はループしたい配列やオブジェクト変数。
第3引数はループごとの処理を書いたテンプレートの中で使用する変数名を指定します。
注意点は、@eachディレクティブは親ビューから変数は継承しないということです

@php
$names = [
    '佐藤',
    '鈴木',
    '高橋',
];
$names = [];
@endphp
{{-- $namesがからだと何も表示されない --}}
@each('demo.blade.loop_each', $names, 'name')

{{-- $namesがからだと第4引数で指定したビューが読み込まれる --}}
@each('demo.blade.loop_each', $names, 'name', 'demo.blade.loop_each_empty')

demo/blade/loop_each.blade.php,demo/blade/loop_each_empty.blade.phpをそれぞれ以下としています。

[{{ $name }}]

each_empty

ループ変数

最後にループ変数を表でまとめておきます。

プロパティ説明
$loop->indexループのインデックス(初期値0)
$loop^->iterationループの繰り返し数(初期値1)
$loop->remaining繰り返しの残り回数
$loop->count全ループ件数
$loop->firstループの先頭の場合true、それ以外はfalse
$loop->lastループの最後の場合true、それ以外はfalse
$loop->depthループのネストレベル
$loop->parent親ループ変数