[PHP] Laravel で条件分岐、ループの制御構文をテンプレートファイルで使用する時の使い方メモ
Laravel ではテンプレート側で表示する際の条件分岐やループなどの制御構文も簡潔に書けるようになっています。通常の PHP とは少しちがった形で提供されていますので使い方を整理してみました。検証している Laravel のバージョンは 5.7 です。
制御構文はディレクティブと呼ばれる @ で始まる書き方で記入していきます。ディレクティブを使用する時は文末のセミコロンは必要ありません。
<目次> if文など isset、emptyの空の判定文 for、while などの繰り返し文 ループを終了したり、繰り返し処理をスキップする ループ中の情報を取得する
if文など
if文
if 文は @if ディレクティブとして使用できます。
使用例
@if ($value) // trueだった場合の表示 @endif
@if ($value) // trueだった場合の表示 @elseif ($value02) // 違う条件の場合で true だった場合の表示 @else // 当てはまらなかった場合の表示 @endif
if文 で false になる場合
条件が否定される場合は @unless ディレクティブが使用できます。
使用例
@unless ($value) // $value がfalseの場合の表示 @endunless
isset、empty の空の判定文
isset
変数が定義されているかを判定するには @isset ディレクティブを使用します。
使用例
@isset ($value) // $value が定義済みの場合表示する @endisset
empty
変数が空かどうかを判定するには @empty ディレクティブを使用します。
使用例
@empty ($value) // $value が空の場合表示する @endempty
for 、while などの繰り返し文
for 文
for 文は @for ディレクティブとして使用できます。
使用例
@for ($i = 0; $i < 10; $i++)
// 繰り返し処理
@endfor
foreach 文
foreach 文は @foreach ディレクティブとして使用できます。
使用例
@foreach ($valus as $valu) // 繰り返し処理 {{ $valu }} @endforeach
foreach else 文
foreach が終わって空になった時になにか処理を入れてからループを終えるには
@forelse ディレクティブが使用できます。
使用例
@forelse ($valus as $valus) <p>{{ $valus }}</p> @empty // $valus が空だった場合の処理 <p>$valus は空になりました。</p> @endforelse
while 文
while 文は @while ディレクティブとして使用できます。
使用例
@while (true) // 繰り返し処理 @endwhile
ループを終了したり、繰り返し処理をスキップする
break 文
ループを終了するには @break ディレクティブを使用できます。@break ディレクティブが出現した時点でループを終了できます。
使用例
条件が当てはまった時に処理を終了します。
@foreach ($users as $user) <li>{{ $user->name }}</li> @if ($user->id == 5) // ループ終了 @break @endif @endforeach
ディレクティブの後に条件を続けて記入して一行で記入することもできます。
@foreach ($users as $user) @break($user->id == 5) @endforeach
continue 文
ループの途中で処理をスキップするには @continue ディレクティブを使用できます。条件が当てはまる時にループをスキップします。
使用例
条件が当てはまった時に処理をスキップして、ループ処理を続けます。
@foreach ($users as $user) @if ($user->id == 5) // ループをスキップ @continue @endif <li>{{ $user->name }}</li> @endforeach
ディレクティブの後に条件を続けて記入して一行で記入することもできます。
@foreach ($users as $user) @continue($user->id == 5) <li>{{ $user->name }}</li> @endforeach
ループ中の情報を取得する
$loop 変数
ループ処理中に $loop 変数を使用するとループ中のインデックス情報などを取得することができて便利です。
使用例
@foreach ($users as $user) {{ var_dump($loop) }} @endforeach
上記のようにループ中に $loop 変数の中身を表示すると以下のような値が入っているのを確認できます。
object(stdClass)#218 (8) { ["iteration"]=> int(1) ["index"]=> int(0) ["remaining"]=> int(2) ["count"]=> int(3) ["first"]=> bool(true) ["last"]=> bool(false) ["depth"]=> int(1) ["parent"]=> NULL }
各値の意味は次のようになっています。
- $loop->iteration
- 現在の繰り返し数の取得
- $loop->index
- 現在のループのインデックスの取得
- $loop->remaining
- 繰り返しの残り数の取得
- $loop->count
- 繰り返し中の配列の総アイテム数の取得
- $loop->first
- ループの最初かどうかを取得
- $loop->last
- ループの最後かどうかを取得
- $loop->depth
- 現在のループのネストレベルを取得
- $loop->parent
- ループがネストしている場合、親のループ変数を取得
$loop 変数を使うと通常の PHP 時には必要だった関数などを追加することなく簡単に制御できるようになり、スマートに書くことができます。
No Comments & Tracbacks