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 | 親ループ変数 |